How to plot a 3D cube based if i have the coordinates of the 8 surrounding nodes?
171 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Dimitris K
am 3 Nov. 2021
Kommentiert: Krishna Prasad
am 13 Apr. 2025
Hello community,
I want to plot a 3d cube based on the coordinates of my geometry (8 nodes). The coordinates of my cube are:
coord=[0 0 0;
0.5 0 0;
0.5 0.5 0;
0 0.5 0;
0 0 0.5;
0.5 0 0.5;
0.5 0.5 0.5;
0 0.5 0.5;];
Thanks a lot in advance.
0 Kommentare
Akzeptierte Antwort
Kelly Kearney
am 4 Nov. 2021
To expand on Star Strider's answer, in your example, you've specified a list of coordinates, but you haven't told Matlab how they should be connected. Based on your original example, the following array of row indices defines the faces of your cube:
coord = [...
0 0 0;
0.5 0 0;
0.5 0.5 0;
0 0.5 0;
0 0 0.5;
0.5 0 0.5;
0.5 0.5 0.5;
0 0.5 0.5;];
idx = [4 8 5 1 4; 1 5 6 2 1; 2 6 7 3 2; 3 7 8 4 3; 5 8 7 6 5; 1 4 3 2 1]';
To plot, substitute the coordinates:
xc = coord(:,1);
yc = coord(:,2);
zc = coord(:,3);
ax(1) = subplot(2,1,1);
patch(xc(idx), yc(idx), zc(idx), 'r', 'facealpha', 0.1);
view(3);
% Deformed
coord2 = coord + rand(size(coord))*0.1;
xc = coord2(:,1);
yc = coord2(:,2);
zc = coord2(:,3);
ax(2) = subplot(2,1,2);
patch(xc(idx), yc(idx), zc(idx), 'r', 'facealpha', 0.1);
view(3);
8 Kommentare
Weitere Antworten (1)
Eric
am 25 Jul. 2024
Another route using the 'surf' function:
x = 0.5*[ 1 1 1 1 1; 1 1 -1 -1 1;1 1 -1 -1 1;1 1 1 1 1];
y = 0.5*[ 1 -1 -1 1 1; 1 -1 -1 1 1;1 -1 -1 1 1;1 -1 -1 1 1];
z = 0.5*[-1 -1 -1 -1 -1;-1 -1 -1 -1 -1;1 1 1 1 1;1 1 1 1 1];
% Plow
fig = figure("Name","cube");
surf(x,y,z,'FaceColor','g')
set(fig.CurrentAxes,"XLim",[-1 1],"YLim",[-1 1],"ZLim",[-1 1]);
xlabel("x")
ylabel("y")
zlabel("z")
0 Kommentare
Siehe auch
Kategorien
Mehr zu Polygons 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!