在MatLab中沿路径移动三维对象

时间:2014-02-18 05:42:41

标签: matlab graphics 3d

所以我有一个对象,我对它应用了一个旋转,我很好奇如何使它沿着路径移动。我还在学习MatLab,所以如果你看到我能做什么/应该做些什么不同的事情请告诉我。 任何帮助表示赞赏。

kittyx = [0 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150  -150 150 150 -150 -150 ...
    150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 ...
    -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 ...
    -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 -150 150 150 -150 150 150 230 150 150 230 150 150 230 ...
    150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 ...
    150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 150 150 230 ...
    150 150 230 150 150 230 150 150 230];
kittyy = [0 0  0  1 1 2  2  3 3 4  4  5 5 6  6  7  7  7.5  7.5 8  8  8.5 8.5 9  9  9.5  9.5 10 10 10 10 10 10 10  10  10  10  10  10  10  10 ...
    10 10 10 10 10 10 10 10 9.5 9.5 9 9 8.5 8.5 8 8 7.5 7.5 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0 -1 -1 -2 -2 ...
    -3 -3 -4 -4 -5 -5 -6 -6 -7 -7 -7.5 -7.5 -8 -8 -8.5 -8.5 -9 -9 -9.5 -9.5 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 ...
    -10 -10 -10 -10 -10 -10 -9.5 -9.5 -9 -9 -8.5 -8.5 -8 -8 -7.5 -7.5 -7 -7 -6 -6 -5 -5 -4 -4 -3 -3 -2 -2 -1 -1 0 0 0 -7 0 7 6.5 0 6 5.5 0 ...
    5 4.5 0 4 3.5 0 3 2.5 0 2 1.5 0 1 0.5 0 0 -.5 0 -1 -1.5 0 -2 -2.5 0 -3 -3.5 0 -4 -4.5 0 -5 -5.5 0 -6 -6.5 0 ... 
    -7 -6.5 0 -6 -5.5 0 -5 -4.5 0 -4 -3.5 0 -3 -2.5 0 -2 -1.5 0 -1 -.5 0 0 .5 0 1 1.5 0 2 2.5 0 3 3.5 0 4 4.5 0 ...
    5 5.5 0 6 6.5 0 7 7.5 0];
kittyz = [6 6  6  5 5 4  4  3 3 2  2  1 1 0  0 -1 -1 -2   -2  -3 -3 -4  -4  -5 -5 -6   -6  -7 -7 -8 -8 -9 -9 -10 -10 -11 -11 -12 -12 -13 -13 ...
    -14 -14 -15 -15 -16 -16 -17 -17 -18 -18 -19 -19 -20 -20 -21 -21 -22 -22 -23 -23 -24 -24 -25 -25 -26 -26 -27 -27 -28 -28 -29 -29 -30 -30 -29 -29 -28 -28 ...
    -27 -27 -26 -26 -25 -25 -24 -24 -23 -23 -22 -22 -21 -21 -20 -20 -19 -19 -18 -18 -17 -17 -16 -16 -15 -15 -14 -14 -13 -13 -12 -12 -11 -11 -10 -10 ...
    -9 -9 -8 -8 -7 -7 -6 -6 -5 -5 -4 -4 -3 -3 -2 -2 -1 -1 0 0 1 1 2 2 3 3 4 4 5 5 6 6 6 -6 -6 -6 -5 -6 -4 -3 -6 ...
    -2 -1 -6 0 1 -6 2 3 -6 4 5 -6 6 7 -6 8 7 -6 6 5 -6 4 3 -6 2 1 -6 0 -1 -6 -2 -3 -6 -4 -5 -6 ...
    -6 -5 -6 -7 -8 -6 -9 -10 -6 -11 -12 -6 -13 -14 -6 -15 -16 -6 -17 -18 -6 -19 -20 -6 -20 -19 -6 -18 -17 -6 -16 -15 -6 -14 -13 -6 ...
    -12 -11 -6 -10 -9 -6 -8 -7 -6];

figure(1)
axis([-200 200 -200 200 -200 200])
hold on
%plot3(kittyx,kittyy,kittyz);
%Rotation Part
object = [kittyx
    kittyy
    kittyz];
v=.2;

for t=0:.1:4*pi

 x = -1*sin(t);
 y = 1*cos(t);
 pitch_angle = atan2(y,t)/sqrt((x/t)^2+(y/t)^2);
 yaw_angle = atan2(y,t)/(x/t);
 R = [cos(pitch_angle) 0 -sin(pitch_angle); 0 1 0; sin(pitch_angle) 0 cos(pitch_angle)];
 R2 = [cos(yaw_angle) -sin(yaw_angle) 0; sin(yaw_angle) cos(yaw_angle) 0; 0 0 1];
 object_pitched = R*(object);
 object_yawed = R2*(object_pitched);
 i = object_yawed(1,:);
 j = object_yawed(2,:);
 k = object_yawed(3,:);

view(45,45)
axis equal
%Plot and set axis
 plot3(i,j,k)
 axis([-200 200 -200 200 -200 200])
 pause(0.2);
 clf;

end

1 个答案:

答案 0 :(得分:0)

您可以在对象坐标中添加/减去一些值。在您的示例中,您可以将t*100添加到旋转对象的x-corrdinate。这会将对象转换为右侧。

plot3(i+t*100,j,k);

您还可以在矢量中存储路径的值,以便对象遵循其预定义的路径。

plot3( i + predifined_x(t), j, k);

其中predifined_x是长度为0:.1:4*pi的向量。