我只能解决它的 Matlab 方面,因为我不熟悉 C#,但我认为 Matlab .NET 编译器应该能够导出所有函数?
1:您可以使用动画 3D 散点图(以及曲面、网格、线图等变体)绘制 4 维数据。如果你仔细想想,你的普通 3D 视频游戏基本上是一个 4D 情节。对于散点图,从 0 秒开始,仅绘制 t4 = 0、x=t1、y=t2、z=t3 的点。在 1 秒时,仅绘制 t4=1 的那些。在 2 秒时,只有 t4=2,依此类推,直到达到 max(t4),然后循环返回。
您还可以将颜色用作第 4 维,以便在 3D 空间中拥有彩色点。
我认为,从可以概括到其他情节的点。
请参阅http://www.mathworks.com/help/techdoc/ref/scatter3.html和http://www.mathworks.com/help/techdoc/ref/surf.html。
2:让我澄清一些事情。鉴于您的初始条件,没有坐标可以是负数:
t2<=5
定义了一个无限 4 维空间的“板”,它在 3 维空间中是无限的,在 1 维空间中是有限的(它有 5 个单位厚)。板的一条边位于原点 和 之间,连接到原点的其他三个边沿和轴<0, 5, 0, 0>
在正方向上延伸至无穷远t1
。t3
t4
t1+t2+t3+t4<=3
定义一个有限的 4 维金字塔,其尖端位于原点,底部朝该<+, +, +, +>
方向。
给定您的OR
,结果是这两个空间的并集。(hyper)pyramid 已经是 (hyper)slab 的一个子集,所以第二个表达式是多余的。平板是微不足道的,所以我将展示如何只可视化金字塔。
为了将其可视化,我认为您应该将 t4 设置为 10 个不同的值,并将其他 3 个参数中的每一个都绘制为不同颜色的表面。
一个例子:
clc
clear
close all
n = 10;
% Manually calculated maximae of x, y, z axes
x = [0 0; 0 3];
y = [0 0; 3 0];
z = [3 3; 0 0]; % surf can only draw polygons, not triangles, so we just squash two points together
% Actual t will be derived from this algorithmically
t = [3 3; 3 3];
% So plots don't replace each other
hold on
for i = 0:0.1:1
% Manually derived
surf(x*i, y*i, z*i, t*(1-i));
end
hold off
% Just some aesthetic stuff
xlabel('t1');
ylabel('t2');
zlabel('t3');
grid on
colormap('hot')
对于不同的 t4,每种颜色都是金字塔的底部(尖端位于原点) - 您可能会想象 3D 金字塔会随着时间的推移而“缩小”。
我不知道相关性,但凸多边形在 Matlab 中非常好:
plot([0 0 1 1 2 2 3 3 0], [0 2 2 1 1 2 2 0 0]); axis([-1 4 -1 4])