在 MatLab 中沿路径移动 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

您只需在对象坐标中添加/减去一些值即可。在您的示例中,您可以将t*100添加到旋转对象的 x 坐标中。这会将对象向右平移。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新