How to plot a 3D cube based if i have the coordinates of the 8 surrounding nodes?
    211 次查看(过去 30 天)
  
       显示 更早的评论
    
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 个评论
采纳的回答
  Kelly Kearney
      
 2021-11-4
        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 个评论
更多回答(1 个)
  Eric
 2024-7-25
        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 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Polygons 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







