2016-12-28 62 views
1

我想有一个3D立体投影图: enter image description here3D立体投影图中,如何改变y轴

为此,我使用代码(只是无轴)这样

angle = 30; 
surf(x, -x*sind(angle)+y*cosd(angle),z) 
axis off 
view([90,50]) 

该工作方式类似(使用坐标变换的对象,而不是在轴上)的另一个解决方案是在这里Oblique projection in Matlab mesh(有人指出由gnovice):

enter image description here

但我也需要正确显示轴。是否可以实现轴属性(y轴)来改变其方向的显示(例如,使用Java)?

+2

你正在寻找被称为[斜投影]投影(HTTPS://en.wikipedia .org/wiki/Oblique_projection),虽然在MATLAB中没有内置的方法,但在链接副本中有答案提供的用户提交选项。 – gnovice

回答

0

如果你想从一个特定的角度来看你的情节(如你所描述的那样),view是非常优雅的,但是你的代码不会做你所描述的。

随着view([90,50])你得到Z轴和Y轴在水平和垂直方向,而不是Z和X.你想要什么

<code>view([90,50])</code>

view([0,0])

<code>view([0,0])</code>

虽然你不能有你的轴完全按照自己的表现,但view([0,0])接近(X轴是不太水平,但接近)。

<code>view([10,15])</code>

代码用来证明:

x=1:0.1:4; 
y=1:0.1:4; 
[X,Y]=meshgrid(x,y); 
Z=sin(X).^2+cos(Y).^2; 
surf(X,Y,Z); 
xlabel('x') 
ylabel('y') 
zlabel('z') 
+0

谢谢你的回答。不幸的是,你的回答不适合我的问题。在你的例子中,y轴是垂直的或者x轴不是水平的。我需要:水平x轴与非垂直y轴。 –

0

我想你在找什么正在改变Projectionperspective截至https://www.mathworks.com/help/matlab/ref/axes-properties.html#prop_Projection记录,然后用view([0,0])。例如,如果运行

x = linspace(0,1); 
y = linspace(0,1); 
[xx,yy] = meshgrid(x,y); 
zz = xx.^2 + yy.^2; 
surf(xx,yy,zz) 
xlabel('x') 
ylabel('y') 
zlabel('z') 
ax = gca; 
ax.Projection = 'perspective'; 
view([0,0]) 

你会得到如下图所示:

enter image description here

+0

非常感谢您的回答。但我不需要透视(消失点)。我需要一个平行六面体,正如我在MS Word制作的图中所示或由我的问题中的代码生成的那样。 –