MATLAB:如何在3D空间中绘制矩形

a9wyjsp7  于 2023-06-23  发布在  Matlab
关注(0)|答案(1)|浏览(382)

我有以下示例数据:

x = [2;4;6;8;10]
y = [10;20;30;40;50]
z = [5;5;5;5;5]

我试图在3d空间中绘制2d x/y表面,但由于z是常数,我似乎无法弄清楚如何做到这一点。所有的例子,我已经试图遵循不工作,因为点是共线。
谢谢

gpfsuwkq

gpfsuwkq1#

在MATLAB中有不同的是生成一个**'3D矩形'也称为平行六面体**,Wolfram definition

1.-定义所有实体点

xrange=[0:1:10];
yrange=[0:1:20];
zrange=[0:1:5];
[x,y,z]=meshgrid(xrange,yrange,zrange);
x=x(:);y=y(:);z=z(:);
P=[x y z];

figure(1);
plot3(P(:,1),P(:,2),P(:,3),'.');
axis equal
grid on

shp1=alphaShape(P(:,1),P(:,2),P(:,3))

figure(2);
plot(shp1)
axis equal

构建alphaShape后,可以使用以下volumesurfaceArea命令:

round(volume(shp1))

(xrange(end)-xrange(1))*(yrange(end)-yrange(1))*(zrange(end)-zrange(1))

surfaceArea(shp1)

2*xrange(end)*yrange(end)+2*xrange(end)*zrange(end)+2*yrange(end)*zrange(end)

2.-仅使用顶点

xrange2=[0 10];
yrange2=[0 20];
zrange2=[0 5];
[x2,y2,z2]=meshgrid(xrange2,yrange2,zrange2);
x2=[x2(:);5];
y2=[y2(:);10];
z2=[z2(:);2.5];
P2=[x2 y2 z2];
Tes=delaunayn(P2);

figure(3)
tetramesh(Tes,P2);
camorbit(40,0);

3.-使用命令patch

v1=[0 0 0;10 0 0;10 20 0;0 20 0
       0 0 5;10 0 5;10 20 5;0 20 5];
f1=[1 2 3 4 1;5 6 7 8 5];

v2=[0 0 0;0 20 0;0 20 5;0 0 5
      10 0 0;10 20 0;10 20 5;10 0 5];
f2=[1 2 3 4 1;5 6 7 8 5];

v3=[0 0 0;10 0 0;10 0 5;0 0 5
      0 20 0;10 20 0;10 20 5;0 20 5];
f3=[1 2 3 4 1;5 6 7 8 5];

figure(4);
hp1=patch('Faces',f1,'Vertices',v1)
hp1.FaceColor=[0 .5 0];
hp1.FaceAlpha=.5;
hp1.EdgeColor='none';

hp2=patch('Faces',f2,'Vertices',v2)
hp2.FaceColor=[.5 0 0];
hp2.FaceAlpha=.5;
hp2.EdgeColor='none';

hp3=patch('Faces',f3,'Vertices',v3)
hp3.FaceColor=[0 0 .5];
hp3.FaceAlpha=.5;
hp3.EdgeColor='none';

grid on
xlabel('x');ylabel('y');zlabel('z');

campos([477 -1122 120])

4.-拉伸二维矩形

命令extrude要求导入几何文件
在MATLAB中,几何文件具有以下等效扩展名:.stl.step.ste.stl,可以使用CAD应用程序(如SolidWorks)生成。
在这里,考虑到这种情况是多么简单,不需要SolidWorks,可以直接生成所需的.stl文件。
接下来,我生成一个三角网格并将其保存到.stl中,然后使用命令importGeometry构建一个2D矩形,该矩形具有正确的类型,可用作命令extrude的输入。

P=[0 0;10 0;10 20;0 20];  % points
T=[1 2 4;2 3 4];               % triangles definition

TR=triangulation(T,P)

figure(5)
triplot(TR)
axis equal
grid on
xlabel('x');ylabel('y');

stlwrite(TR,'base1.stl','text')

这是base1.stl的内容:

solid MATLAB_1
facet normal 0 0 1
  outer loop
   vertex 0 0 0
   vertex 10 0 0
   vertex 0 20 0
  endloop
 endfacet
facet normal 0 -0 1
  outer loop
   vertex 10 0 0
   vertex 10 20 0
   vertex 0 20 0
  endloop
 endfacet
endsolid MATLAB_1

现在进行挤出:

model = createpde;
b1 = importGeometry(model,'base1.stl');

figure(6)
pdegplot(b1,'FaceLabels','on')

extrude(b1,5)

pdegplot(b1,'FaceLabels','on','FaceAlpha',0.5)

grid on
xlabel('x');ylabel('y');zlabel('z');

相关问题