登录论坛

查看完整版本 : [讨论]3d圆柱的旋转


yamikuku
2008-06-19, 22:52
现在知道空间两个点1(x1,y1,z1)和2(x2,y2,z2)分别是圆柱上下面的圆心,直径D也知道
我自己编的代码如下

function test2_cylinder(x1,y1,z1,x2,y2,z2,D)

if (nargin < 7)
x1 = 1;
y1 = 1;
z1 = 1;
x2 = 2;
y2 = 2;
z2 = 2;
D = 1;
end
t=0:pi/25:2*pi;
h=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2);%点1和点2间距离
s=0:h/50:h;
r=D/2;
n=x1^2+y1^2+(z1+h)^2;

ux=x1*x2/n;uy=y1*x2/n;uz=(z1+h)*x2/n;%转制矩阵
vx=x1*y2/n;vy=y1*y2/n;vz=(z1+h)*y2/n;%转制矩阵
wx=x1*z2/n;wy=y1*z2/n;wz=(z1+h)*z2/n;%转制矩阵

x=x1+r*cos(t)*ux+r*sin(t)*uy+s*uz;
y=y1+r*cos(t)*vx+r*sin(t)*vy+s*vz;
z=z1+r*cos(t)*wx+r*sin(t)*wy+s*wz;


X=meshgrid(x);
Y=meshgrid(y);
Z=[meshgrid(z)]';
surf(X,Y,Z)
xlabel('x'),ylabel('y'),zlabel('z')
axis equal


显示的是一个平面,而不是圆柱面,自己也查了很多,可总找不到问题,不知道是哪里出错了,
请各位帮看看,先谢谢了。

yamikuku
2008-06-19, 23:01
当把Z=[meshgrid(z)]'改为Z=meshgrid(z)
可以看到显示的是一条直线,而不是旋转上升的曲线,

如果把旋转矩阵改为
ux=1;uy=0;uz=0;
vx=0;vy=1;vz=0;
wx=0;wy=0;wz=1;
这时就能显示一个垂直于XOY平面的圆柱,
可我自己也检查了自己计算的转制矩阵,应该没错
如下计算出转制矩阵
(x2,y2,z2)=( , , ; , , ; , , )x(x1,y1,z1+h)

请大家帮忙看看