【发布时间】:2015-11-05 11:16:50
【问题描述】:
我有不规则的 3D 笛卡尔坐标,占球体表面的八分之一。感谢 Benoit_11 Answer to a previously posed question 现在可以在 MATLAB cftool 之外的普通命令行脚本中绘制曲面
从那时起,我一直在尝试使用以下代码从该区域内的其他答案拼凑在一起来计算表面的面积。该代码基本上从产生表面的顶点计算面积,然后将它们全部相加以产生面积。
surface = [ansx1,ansy1,ansz1];
[m,n] = size(zdata1);
area = 0;
for i = 1:m-1
for j = 1:n-1
v0_1 = [xdata1(i,j) ydata1(i,j) zdata1(i,j) ];
v1_1 = [xdata1(i,j+1) ydata1(i,j+1) zdata1(i,j+1) ];
v2_1 = [xdata1(i+1,j) ydata1(i+1,j) zdata1(i+1,j) ];
v3_1 = [xdata1(i+1,j+1) ydata1(i+1,j+1) zdata1(i+1,j+1)];
a_1= v1_1 - v0_1;
b_1 = v2_1 - v0_1;
c_1 = v3_1 - v0_1;
A_1 = 1/2*(norm(cross(a_1, c_1)) + norm(cross(b_1, c_1)));
area = area + A_1;
end
end
fprintf('\nTotal area is: %f\n\n', area);`
但是我遇到的问题是计算的表面过度估计了可能的表面。这是由于从原始矩阵中删除了 NaN 并将它们替换为 0,这导致了图 1。图 2 提供了我要计算的唯一区域
有没有人可以忽略代码中的零,以计算生成图 1 的数据的表面积?
提前致谢
【问题讨论】:
-
曲面的所有部分(正方形、三角形等)如果您知道坐标。您可以使用交叉方法进行计算。当然,你必须记住,三角效应是射影的。 en.wikipedia.org/wiki/Cross_product