我有一个3D
区域,由以下3个方程和轴包围。
x+y<1
,x>(z/(1+z))*(1-y)
,x>1-((1+z)*y/z)
。
x
,y
和z
的约束位于0
和1
。
按照matlab代码生成3D图,我想将有界区域显示为实体。怎么做?
y=0:0.05:1; %v2
z=0:0.05:1; % delta
[Y,Z]= meshgrid(y,z);
X = 1-Y;
axis([0 1 0 1 0 1]);
surf(X,Y,Z);
hold on;
X = (Z./(1+Z))*(1-Y);
axis([0 1 0 1 0 1]);
surf(X,Y,Z);
X = 1-((1+Z)./Z)*Y;
axis([0 1 0 1 0 1]);
surf(X,Y,Z);
请将解决方案限制为Matlab
或R
。
答案 0 :(得分:2)
%构建单位多维数据集的曲面细分作为单纯复形 sc = tessellatelattice({0:.1:1,0:.1:1,0:.1:1});
%截断它以创建一个直角三角形棱镜, %使得x + y <= 1 sc = planartruncate(sc,[。5 .5 0], - [1 1 0]);
%提取点,创建一组非线性约束 x = sc.domain(:,1); y = sc.domain(:,2); z = sc.domain(:,3); %构建非线性曲面约束 sc.range = [x - (z ./(1+z))。*(1-y),x - (1 - ((1 + z)。* y。/ z))];
%截断那些不符合这些约束的部分 %x>(z /(1 + z))*(1-y) sc = isotruncate(sc,0,1,'range','above');
%x&gt; 1 - ((1 + z)* y / z) sc = isotruncate(sc,0,2,'range','above');
%绘制生成的blob plotsc(SC, '标志物', '无')
正如你所看到的,它是一个直角三棱柱,但有两个“面孔”,有点夸张。
这使用了我的simplicialcomplex工具箱,我偶尔会发布,但尚未发布,因为学习使用需要花费一些精力。一旦学会了,如果有人愿意花费精力学习它,这是一件有用的事情。