[英]Compute area of 3D surface given coordinates of points
給定每個點的坐標,如何計算MATLAB中的三維面的面積?
x=-5:1:5;y=-5:1:5;
[xx,yy]=meshgrid(x,y);zz=Z;
figure(1)
mesh(xx,yy,zz)
figure(2)
xb=-5:0.25:5;
yb=-5:0.25:5;
[xxb,yyb]=meshgrid(xb,yb);
zzb=interp2(xx,yy,zz,xxb,yyb,'cubic');
mesh(xxb,yyb,zzb)
以上是我的代碼。
圖片是z的數據。
我試圖搜索類似的問題,但就是找不到。
嘗試將其轉換為AlphaShape然后使用SurfaceArea 。
1.- alphaShape
不適用於這個問題,因為這個特定的表面是開放的。
alphaShape
生成 2D 或 3D封閉 POLYGONS 。
這是第一個表面
x=-5:1:5;y=-5:1:5;
[xx,yy]=meshgrid(x,y);
zz=[13.6 -8.2 -14.8 -6.6 1.4 0 -3.8 1.4 13.6 16.8 0
-8.2 -15.8 -7.9 2.2 3.8 0 0.6 7.3 10.1 0 -16.8
-14.8 -7.9 2.5 5.8 2.3 0 2.7 5.1 0 -10.1 -13.7
-6.6 2.2 5.9 3.0 -0.3 0 1.9 0 -5.1 -7.3 -1.4
1.4 3.8 2.3 -0.3 -0.9 0 0 -1.7 -2.7 -0.6 3.8
0 0 0 0 0 0 0 0 0 0 0
-3.8 0.6 2.7 1.7 0 0 0.9 0.3 -2.3 -3.8 -1.4
1.4 7.3 5.1 0 -1.7 0 0.3 -3.1 -5.8 -2.2 6.6
13.6 10.1 0 -5.1 -2.7 0 -2.3 -5.8 -2.5 7.9 14.8
16.8 0 -10.1 -7.3 -0.6 0 -3.8 -2.2 7.9 15.8 8.2
0 16.3 -13.6 -1.4 3.8 0 -1.4 6.6 14.8 8.2 -13.6];
figure(1)
sh1=mesh(xx,yy,zz)
這是第二個表面
figure(2)
xb=-5:0.1:5;
yb=-5:0.1:5;
[xxb,yyb]=meshgrid(xb,yb);
zzb=interp2(xx,yy,zz,xxb,yyb,'cubic');
mesh(xxb,yyb,zzb)
現在在第一個表面上嘗試alphaShape
P1=[xx(:) yy(:) zz(:)];
shp1 = alphaShape(P1(:,1),P1(:,2),P1(:,3));
figure;
plot(shp1)
axis equal
瞧:這是裝置
並在嘗試時
A1=area(shp1)
砰:
Error using alphaShape/area
This method is only applicable to 2D alpha shapes.
2.-必須整合每個平面。
每個平面的頂點都可以使用mesh
中可用的手柄
sh1=mesh(xx,yy,zz)
檢查簡化的屬性
sh1 =
Surface with properties:
EdgeColor: 'flat'
LineStyle: '-'
FaceColor: [1 1 1]
FaceLighting: 'none'
FaceAlpha: 1
XData: [11×11 double]
YData: [11×11 double]
ZData: [11×11 double]
CData: [11×11 double]
單擊命令 Window中刪節屬性后Show all properties
以讀取所有屬性
AlignVertexCenters: off
AlphaData: 1
AlphaDataMapping: 'scaled'
AmbientStrength: 0.300000000000000
Annotation: [1×1 matlab.graphics.eventdata.Annotation]
BackFaceLighting: 'reverselit'
BeingDeleted: off
BusyAction: 'queue'
ButtonDownFcn: ''
CData: [11×11 double]
CDataMapping: 'scaled'
CDataMode: 'auto'
...
VertexNormals: [11×11×3 double]
VertexNormalsMode: 'auto'
Visible: on
XData: [11×11 double]
XDataMode: 'manual'
XDataSource: ''
YData: [11×11 double]
YDataMode: 'manual'
YDataSource: ''
ZData: [11×11 double]
ZDataSource: ''
3.-好消息:在Mathworks 文件交換中,有一個名為 surfarea 的surfarea
,感謝 Sky Santorius,它完全完成了第 2 點中提到的任務,這正是石 sh 所要求的。
surfarea
可在以下鏈接中找到:
將表面應用於第一個表面
[A1,cell_areas_A1,centroid1]=surfarea(xx,yy,zz);
所得表面積為
A1 =
6.783763291711880e+02
並且在計算插值的第二個表面的面積時
[A2,cell_areas_A2,centroid2]=surfarea(xxb,yyb,zzb);
所得表面積為
A2 =
6.504878453848488e+02
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.