如何计算命令“view”创建的投影区域?

时间:2017-11-15 00:55:03

标签: matlab plot view projection map-projections

如何计算投影面积?例如,使用以下代码,我在X-Z平面上得到一个投影。

[x,y,z]=peaks;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z')
view([0,0])

X-Z Plane Projection

我希望能够确定我创建的任何冲浪地块的投影区域。是否有命令或功能?

2 个答案:

答案 0 :(得分:1)

简短回答

polyarea(x(1,:),max(z))+polyarea(x(1,:),min(z))

<强>解释

您想要计算其面积的图是

enter image description here

在区域计算中,您只需要投影的边框

plot(x(1,:),max(z))
hold on
plot(x(1,:),min(z),'r')

,输出为,

enter image description here

总面积是两个区域的总和(上边界到x轴,下边界到x轴),

>> polyarea(x(1,:),max(z))+polyarea(x(1,:),min(z))
>> 28.5947

答案 1 :(得分:0)

如果要将投影区域设置为任意视角,可以使用viewmtx函数将曲面投影到查看平面上,然后使用boundarypolyarea提取边界并计算面积。像这样:

 % draw your surface
 [x,y,z]=peaks;
 surf(x,y,z);
 xlabel('x');ylabel('y');zlabel('z')
 axis equal;
 %extract the viewing angle, and calculate the resulting transformation matrix
 [az,el]=view(gca);
 T= viewmtx(az,el);
 % transform the surface points by this transformation matrix
 pts= [x(:),y(:),z(:),ones(numel(x),1)]';
 tpts= T*pts;
 tpts=(tpts(1:3,:))';
 % now "tpts" has the surface points projected onto the viewing plane
 figure, plot( tpts(:,1), tpts(:,2), 'bo'); axis equal;
 % calculate the border of this region, and calculate its area.
 border = boundary(tpts(:,1), tpts(:,2));
 projectedArea = polyarea(tpts(border,1), tpts(border,2));

此方法基于viewmtx的帮助。