Filter löschen
Filter löschen

Cube rotation solid line in plot missing

2 Ansichten (letzte 30 Tage)
MOHIT SWADIA
MOHIT SWADIA am 1 Apr. 2024
Beantwortet: Poorna am 1 Apr. 2024
I am trying to get cube roatation.. the code is as follows: What I am getting as output is a plot which is attached here. Now, the plot should be the full cube. So in Orignal and New one must have all edges of cube. I am not getting what I am doing wrong in the code. Please help.
p1=[-1,1,1];
p2=[1,1,1];
p3=[1,-1,1];
p4=[-1,-1,1];
p5=[-1,1,-1];
p6=[1,1,-1];
p7=[1,-1,-1];
p8=[-1,-1,-1];
c=[p1' p2' p3' p4' p5' p6' p7' p8';1 1 1 1 1 1 1 1 ];
tx=1;
ty=1;
tz=1;
T1=[1 0 0 tx;0 1 0 ty;0 0 1 tz;0 0 0 1];
a=45;
r1=[cosd(a) -sind(a) 0 0; sind(a) cosd(a) 0 0;0 0 1 0;0 0 0 1];
T2=inv(T1);
m=T2*r1*T1;
d=m*c;
fprintf('new vertices:\n');
for i=1:8
fprintf(('%2f,%2f,%2f)\n'),d(1,1),d(2,1),d(3,i));
end;
%ploting
c=[p1' p2' p3' p4' p5' p6' p7' p8' p5' p4' p3' p7' p6' p2';1 1 1 1 1 1 1 1 1 1 1 1 1 1];
d=m*c;
plot3(c(1,:),c(2,:),c(3,:),'b');
hold on;
plot3(d(1,:),d(2,:),d(3,:),'r');
xlabel('x');
ylabel('y');
zlabel('z');
legend('orginal','new');
axis equal;
grid;
hold off

Antworten (1)

Poorna
Poorna am 1 Apr. 2024
Hi Mohit,
I see that you are trying to plot a cube parallel to the axes and then rotate the cube by 45 degrees along the line parallel to z-axis passing through x = -1 and y = -1.
Although the rotation logic is correct the reason you couldn't see all edges of the cube is because of the way you plot the cube. The below code will plot a line plot connecting adjancent points as ordered in c.
c=[p1' p2' p3' p4' p5' p6' p7' p8' p5' p4' p3' p7' p6' p2';1 1 1 1 1 1 1 1 1 1 1 1 1 1];
plot3(c(1,:),c(2,:),c(3,:),'b')
This method, however, doesn't fully represent a cube since it misses plotting some of the line segments that define the cube's structure.
To correctly visualize the cube, you should plot each edge distinctly. This can be achieved by separately plotting the top and bottom faces, and then connecting them with the four edges (pillars) that complete the cube's form as shown below
%plot the top face
c=[p1' p2' p3' p4' p1' ; 1 1 1 1 1];
plot3(c(1,:),c(2,:),c(3,:),'b');
hold on;
%plot the bottom face
c = [p5' p6' p7' p8' p5' ; 1 1 1 1 1];
hold on;
plot3(c(1,:),c(2,:),c(3,:),'b');
%plot the remaining 4 pillar edges that connect the top and bottom faces.
c = [p1' p5' ; 1 1];
hold on;
plot3(c(1,:),c(2,:),c(3,:),'b');
c = [p2' p6' ; 1 1];
hold on;
plot3(c(1,:),c(2,:),c(3,:),'b');
c = [p3' p7' ; 1 1];
hold on;
plot3(c(1,:),c(2,:),c(3,:),'b');
c = [p4' p8' ; 1 1];
hold on;
plot3(c(1,:),c(2,:),c(3,:),'b');
You could do the same for the rotated cube.
Hope this helps!

Kategorien

Mehr zu Line Plots finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by