如何计算投影面积?例如,使用以下代码,我在X-Z平面上得到一个投影。
[x,y,z]=peaks;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z')
view([0,0])
我希望能够确定我创建的任何冲浪地块的投影区域。是否有命令或功能?
答案 0 :(得分:1)
简短回答
polyarea(x(1,:),max(z))+polyarea(x(1,:),min(z))
<强>解释强>
您想要计算其面积的图是
在区域计算中,您只需要投影的边框
plot(x(1,:),max(z))
hold on
plot(x(1,:),min(z),'r')
,输出为,
总面积是两个区域的总和(上边界到x轴,下边界到x轴),
>> polyarea(x(1,:),max(z))+polyarea(x(1,:),min(z))
>> 28.5947
答案 1 :(得分:0)
如果要将投影区域设置为任意视角,可以使用viewmtx
函数将曲面投影到查看平面上,然后使用boundary
和polyarea
提取边界并计算面积。像这样:
% 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的帮助。