A question about motion plot

조회 수: 1 (최근 30일)
Sina
Sina 2023년 7월 11일
편집: Aditya Singh 2023년 7월 11일
Hello
I've written a MATLAB function such below:
function motionplot3D(p,next_pos)
x1=[p(1) next_pos(1)];
x2=[p(4) next_pos(4)];
x3=[p(7) next_pos(7)];
x4=[p(10) next_pos(10)];
x5=[p(13) next_pos(13)];
y1=[p(2) next_pos(2)];
y2=[p(5) next_pos(5)];
y3=[p(8) next_pos(8)];
y4=[p(11) next_pos(11)];
y5=[p(14) next_pos(14)];
z1=[p(3) next_pos(3)];
z2=[p(6) next_pos(6)];
z3=[p(9) next_pos(9)];
z4=[p(12) next_pos(12)];
z5=[p(15) next_pos(15)];
totaltime = seconds(0.3);
steptime = totaltime/length(x1);
figure;
for ii = 1:length(x1)-1
npoints = 200;
pointsx1 = linspace(x1(ii),x1(ii+1),npoints);
pointsy1 = linspace(y1(ii),y1(ii+1),npoints);
pointsz1 = linspace(z1(ii),z1(ii+1),npoints);
pointsx2 = linspace(x2(ii),x2(ii+1),npoints);
pointsy2 = linspace(y2(ii),y2(ii+1),npoints);
pointsz2 = linspace(z2(ii),z2(ii+1),npoints);
pointsx3 = linspace(x3(ii),x3(ii+1),npoints);
pointsy3 = linspace(y3(ii),y3(ii+1),npoints);
pointsz3 = linspace(z3(ii),z3(ii+1),npoints);
pointsx4 = linspace(x4(ii),x4(ii+1),npoints);
pointsy4 = linspace(y4(ii),y4(ii+1),npoints);
pointsz4 = linspace(z4(ii),z4(ii+1),npoints);
pointsx5 = linspace(x5(ii),x5(ii+1),npoints);
pointsy5 = linspace(y5(ii),y5(ii+1),npoints);
pointsz5 = linspace(z5(ii),z5(ii+1),npoints);
pointsx6 = linspace(x6(ii),x6(ii+1),npoints);
pointsy6 = linspace(y6(ii),y6(ii+1),npoints);
pointsz6 = linspace(z6(ii),z6(ii+1),npoints);
pointsx7 = linspace(x7(ii),x7(ii+1),npoints);
pointsy7 = linspace(y7(ii),y7(ii+1),npoints);
pointsz7 = linspace(z7(ii),z7(ii+1),npoints);
pointsx8 = linspace(x8(ii),x8(ii+1),npoints);
pointsy8 = linspace(y8(ii),y8(ii+1),npoints);
pointsz8 = linspace(z8(ii),z8(ii+1),npoints);
pointsx9 = linspace(x9(ii),x9(ii+1),npoints);
pointsy9 = linspace(y9(ii),y9(ii+1),npoints);
pointsz9 = linspace(z9(ii),z9(ii+1),npoints);
for jj = 1:npoints
pause(seconds(steptime)/npoints);
plot3([pointsx1(jj),pointsx1(jj)],[pointsy1(jj),pointsy1(jj)],[pointsz1(jj),pointsz1(jj)],'-*',[pointsx2(jj),pointsx2(jj)],[pointsy2(jj),pointsy2(jj)],[pointsz2(jj),pointsz2(jj)],'-o',...
[pointsx3(jj),pointsx3(jj)],[pointsy3(jj),pointsy3(jj)],[pointsz3(jj),pointsz3(jj)],'-o',...
[pointsx4(jj),pointsx4(jj)],[pointsy4(jj),pointsy4(jj)],[pointsz4(jj),pointsz4(jj)],'-o',...
[pointsx5(jj),pointsx5(jj)],[pointsy5(jj),pointsy5(jj)],[pointsz5(jj),pointsz5(jj)],'-o',...
[pointsx6(jj),pointsx6(jj)],[pointsy6(jj),pointsy6(jj)],[pointsz6(jj),pointsz6(jj)],'-o',...
[pointsx7(jj),pointsx7(jj)],[pointsy7(jj),pointsy7(jj)],[pointsz7(jj),pointsz7(jj)],'-o',...
[pointsx8(jj),pointsx8(jj)],[pointsy8(jj),pointsy8(jj)],[pointsz8(jj),pointsz8(jj)],'-o',...
[pointsx9(jj),pointsx9(jj)],[pointsy9(jj),pointsy9(jj)],[pointsz9(jj),pointsz9(jj)],'-o');
xlim([-5 30]);
ylim([-5 30]);
zlim([-5 30]);
grid on
xlabel('X Axis'), ylabel('Y Axis') , zlabel('Z Axis');
end
end
In this function I want to show motion plot of 5 points moving from a point to the next point. p , next_pos are 15*1 vectors that show coordinates of 5 points in 3D space. p is start and next_pos is next.
Now I want to add another item. I want to draw some lines between each pair of points to show moving path. For better understanding see below:
Up picture is a current shot of my motion plot and down picture is my desired. Please help me how to do this.
Thank you!

채택된 답변

Aditya Singh
Aditya Singh 2023년 7월 11일
편집: Aditya Singh 2023년 7월 11일
Hi Sina,
I understand you want to add line between points in the motion plot.
You can do it by plotting a line between the desired points in the for loop itself. You can refer to the below code
x1 = [p(1) next_pos(1)];
x2 = [p(4) next_pos(4)];
x3 = [p(7) next_pos(7)];
x4 = [p(10) next_pos(10)];
x5 = [p(13) next_pos(13)];
y1 = [p(2) next_pos(2)];
y2 = [p(5) next_pos(5)];
y3 = [p(8) next_pos(8)];
y4 = [p(11) next_pos(11)];
y5 = [p(14) next_pos(14)];
z1 = [p(3) next_pos(3)];
z2 = [p(6) next_pos(6)];
z3 = [p(9) next_pos(9)];
z4 = [p(12) next_pos(12)];
z5 = [p(15) next_pos(15)];
totaltime = seconds(0.3);
steptime = totaltime / length(x1);
figure;
hold on; % Add this line to enable plotting lines between points
for ii = 1:length(x1)-1
npoints = 200;
pointsx1 = linspace(x1(ii), x1(ii+1), npoints);
pointsy1 = linspace(y1(ii), y1(ii+1), npoints);
pointsz1 = linspace(z1(ii), z1(ii+1), npoints);
pointsx2 = linspace(x2(ii), x2(ii+1), npoints);
pointsy2 = linspace(y2(ii), y2(ii+1), npoints);
pointsz2 = linspace(z2(ii), z2(ii+1), npoints);
pointsx3 = linspace(x3(ii), x3(ii+1), npoints);
pointsy3 = linspace(y3(ii), y3(ii+1), npoints);
pointsz3 = linspace(z3(ii), z3(ii+1), npoints);
pointsx4 = linspace(x4(ii), x4(ii+1), npoints);
pointsy4 = linspace(y4(ii), y4(ii+1), npoints);
pointsz4 = linspace(z4(ii), z4(ii+1), npoints);
pointsx5 = linspace(x5(ii), x5(ii+1), npoints);
pointsy5 = linspace(y5(ii), y5(ii+1), npoints);
pointsz5 = linspace(z5(ii), z5(ii+1), npoints);
for jj = 1:npoints
pause(seconds(steptime) / npoints);
plot3([pointsx1(jj), pointsx1(jj)], [pointsy1(jj), pointsy1(jj)], [pointsz1(jj), pointsz1(jj)], '-*',...
[pointsx2(jj), pointsx2(jj)], [pointsy2(jj), pointsy2(jj)], [pointsz2(jj), pointsz2(jj)], '-o',...
[pointsx3(jj), pointsx3(jj)], [pointsy3(jj), pointsy3(jj)], [pointsz3(jj), pointsz3(jj)], '-o',...
[pointsx4(jj), pointsx4(jj)], [pointsy4(jj), pointsy4(jj)], [pointsz4(jj), pointsz4(jj)], '-o',...
[pointsx5(jj), pointsx5(jj)], [pointsy5(jj), pointsy5(jj)], [pointsz5(jj), pointsz5(jj)], '-o');
% Add lines between points
line([pointsx1(jj), pointsx2(jj)], [pointsy1(jj), pointsy2(jj)], [pointsz1(jj), pointsz2(jj)]);
line([pointsx2(jj), pointsx3(jj)], [pointsy2(jj), pointsy3(jj)], [pointsz2(jj), pointsz3(jj)]);
line([pointsx3(jj), pointsx4(jj)], [pointsy3(jj), pointsy4(jj)], [pointsz3(jj), pointsz4(jj)]);
line([pointsx4(jj), pointsx5(jj)], [pointsy4(jj), pointsy5(jj)], [pointsz4(jj), pointsz5(jj)]);
xlim([-5 30]);
ylim([-5 30]);
zlim([-5 30]);
grid on;
xlabel('X Axis');
ylabel('Y Axis');
zlabel('Z Axis');
end
end
For more information, please refer to
Hope it helps!

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Animation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by