java - 3D 空间中 n 边平面多边形的面积

标签 java polygons

因此,我有一组 n 坐标 (x,y,z),用于平面 n 边多边形。坐标还没有任何特定的格式,因为我不确定什么最适合该应用程序。由此我需要推断出多边形的面积,但我不知道如何实现这一点。

我考虑过使用多边形三角剖分,然后计算每条边的长度,以在海伦公式中用于计算每个三角形的面积,然后再将它们相加。但我不确定是否有更简单的方法?更不用说从哪里开始实现了。

任何想法将不胜感激,谢谢。

最佳答案

3D 空间中三角形的面积由其两条边 vector 叉积的一半给出。

area = |   (v1 - v0)   x   (v2 - v0)   | / 2

或者,按元素:

       | [ (x1 - x0) ]   [ (x2 - x0) ] |
area = | [ (y1 - y0) ] x [ (y2 - y0) ] | / 2
       | [ (z1 - z0) ]   [ (z2 - z0) ] |

因此,您可以选择多边形的第一个顶点作为 [z0 y0 z0],然后将所有顶点的数量相加:

area = | sum_i   (v_(i) - v0)   x   (v_((i+1) % N  - v0)   | / 2

或者,按元素:

       |       [ (x_(i) - x0) ]   [ (x_((i+1) % N) - x0) ] |
area = | sum_i [ (y_(i) - y0) ] x [ (y_((i+1) % N) - y0) ] | / 2
       |       [ (z_(i) - z0) ]   [ (z_((i+1) % N) - z0) ] |

其中 sum_i 应该表示所有顶点的总和,对于 i in 0..(N-1),订阅 _(i) 表示第 i 个顶点的坐标。 (i+1) % N 只是处理多边形点的环绕(即第 N-1 点与第 0 点有一条线)。

请注意,幅度是在对叉积求和之后得出的。

关于java - 3D 空间中 n 边平面多边形的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893856/

相关文章:

java - 使用泛型获取 java.lang.Class

java - 使用 Monetary API java 进行格式化的超过 2 精度舍入

c++ - 测试多边形是否弱简单

gis - 具有重叠多边形的 Shapefile : calculate average values

c# - 分解复杂多边形的算法

java - 在 openGL Java 中为球体对象的三角网格生成索引

java - Xpath 在 Chrome 浏览器中工作,但相同的 Xpath 在 Firefox 浏览器中不工作

java - 强化 : Null dereference for Java 8

javascript - 分组多边形

java - 使用 "=="语句