八度:在3d中移动轮廓线?

时间:2018-12-11 07:31:53

标签: plot octave matlab-figure

在八度中我想在3D中创建函数的轮廓线并 然后在空间中移动它:

x1=-4:0.1:4;

[X,Y]=meshgrid(x1,x1);

Z= X.^2+2*Y.^2;

hx=contour(X,Y,Z,[4 4]);

所以我得到了轮廓。 如何移动?

我想通过添加向量[a,b,c]来翻译它。

编辑:

例如参见此处。将蓝色椭圆移到黄色椭圆的位置。

an ellipse moved

谢谢

卡尔

3 个答案:

答案 0 :(得分:1)

如安迪(Andy)所述,轮廓是2D图像,因为它是3D曲线与平行于XY平面的给定平面的相交的投影。 例如,地理地图上的海拔曲线是等高线,而地图是2D。

为解释3D和2D等高线之间的差异,我绘制了数据的3D曲面和3个多重数字。 我不是使用高度值4而是使用0,5,10..50为不同的Z值设置多个轮廓

x1=-4:0.1:4; 
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
subplot(2,2,1)
surf(X,Y,Z);
subplot(2,2,2)
contour(X,Y,Z,0:5:50);
subplot(2,2,3)
contour(X+2,Y+2,Z,0:5:50);
subplot(2,2,4)
contour(X,Y,Z+4,0:5:50);
print -djpg figure2.jpg

Octave multiplot

您可以看到子图1(左上)是3D表面,子图2(右上)是2D图像,报告了从5到50的Z的所有投影。 Z = 0的轮廓只是一个点,没有绘制。

在子图3(底部,左),我们将图形沿XY方向移动,X,Y = 2,2。 X,Y范围而不是-4:4现在变为-2:6。

在子图4(右下)上,将图形沿Z方向移动一个值4。轮廓形状因与平行于XY平面的平面的交点而不同 不一样。

答案 1 :(得分:0)

现在您已经澄清了您的需求,我们可以提出解决方案。
首先,我们需要使用countourc

恢复所选国家(Z = 4)的坐标
x1=-4:0.1:4; 
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
C=contourc(X,Y,Z,[4 4]);

轮廓中有137(x,y)个点

size (C)
ans =

     2   138

C(:,1:4)
ans =

     4.000000    -0.280000    -0.200000    -0.100000
   137.000000    -1.400000    -1.406897    -1.412069

C(1,1)是Z轴高度,C(2,1)是对数,因此我们可以用来提取国家的原始位置;

CX=C(1,2:end);
CY=C(2,2:end);
CZ=repmat([4],1,C(2,1));

然后在原始空间位置并以Z = 0绘制,即在XY平面上的投影

plot3(CX,CY,CZ,"color","yellow");
hold on;
plot3(CX,CY,CZ-4,"color","blue");
print -djpg figure3.jpg

3D contour and projection

答案 2 :(得分:0)

对轮廓和轮廓的混淆感到抱歉。现在,我找到了使用轮廓3作为@andy建议的解决方案:

x1=-4:0.1:4;
[X,Y]=meshgrid(x1,x1);
Z= X.^2+2*Y.^2;
contour3(X,Y,Z,[2 2]);
hold on
[hx,c]=contour3(X+1,Y+2,Z,[2 2]);
set(c,"zlevelmode","manual","zlevel",3)

然后给出: enter image description here