How do I rotate the view of a cylinder created using surf plot?

조회 수: 49 (최근 30일)
Martin Doherty
Martin Doherty 2021년 11월 24일
댓글: Kevin Holly 2022년 2월 3일
I have created a simple cylinder with radius (r), length (l) and then plotted this to create a surface using the function surf. However, the angle of the plot is such that the cylinder is pointing upwards i.e. z-axis points directly upwards:
I wish to automatically plot the surface but with the orientation change below:
I have attempted to use the view function but can't seem to master this correctly.
Thanks for the help,
Martin
  댓글 수: 2
Jan
Jan 2021년 11월 24일
You are using 2 left handed coordinate systems. This is unusual.

댓글을 달려면 로그인하십시오.

답변 (2개)

Adam Danz
Adam Danz 2021년 11월 24일
편집: Adam Danz 2021년 11월 28일
Use makehgtform to translate and rotate the object.
[X,Y,Z]=cylinder([0 3],1000);
M=makehgtform('translate',___,'xrotate',___,'yrotate',___,'zrotate',___);
h=surf(X,Y,Z,'Parent',hgtransform('Matrix',M),___);
Also see this answer.
If you're trying to change the orientation of the entire axes, set cameraUpVector or use camup.
ax = gca();
ax.CameraUpVector = [0 1 0];

Kevin Holly
Kevin Holly 2021년 11월 24일
Here is another method, if you want to rotate the surf plot.
figure
[x,y,z] = cylinder(2,20);
obj = surf(x,y,80*z);
xlim([-10 10])
ylim([-10 10])
zlim([0 100])
xlabel('x')
ylabel('y')
zlabel('z')
figure
[x,y,z] = cylinder(2,20);
obj = surf(x,y,80*z);
rotate(obj,[1 0 0],90)
xlim([-10 10])
ylim([-100 100])
zlim([30 50])
xlabel('x')
ylabel('y')
zlabel('z')
figure
[x,y,z] = cylinder(2,20);
obj = surf(x,y,80*z);
rotate(obj,[1 0 0],90)
rotate(obj,[0 0 1],90)
xlabel('x')
ylabel('y')
zlabel('z')
xlim([-50 50])
ylim([-10 10])
zlim([30 50])
  댓글 수: 5
Martin Doherty
Martin Doherty 2021년 12월 13일
The orientation looks correct but does this position the cylinder centreline at (0,0,0:80)? It doesn't look like it from the plot above.
Kevin Holly
Kevin Holly 2022년 2월 3일
I must have missed your previous comment.
figure
[x,y,z] = cylinder(2,20);
obj = surf(x,y,80*z);
rotate(obj,[1 0 0],90)
rotate(obj,[0 0 1],90)
xlabel('z')
ylabel('x')
zlabel('y')
xlim([0 100])
ylim([-10 10])
zlim([-10 20])
obj.XData=obj.XData+50;
obj.YData=obj.YData;
obj.ZData=obj.ZData-40;

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by