C++ 多边形面积和多面体体积的精确公式

C++ 多边形面积和多面体体积的精确公式,c++,python,matlab,polygon,polyhedra,C++,Python,Matlab,Polygon,Polyhedra,我想计算一个随机多边形的面积和一个随机多面体的体积。谷歌搜索让我找到了镶嵌和蒙特卡罗方法。然而,我只对精确计算感兴趣,而对通过收敛得到的近似值不感兴趣。也许有人会背诵确切的公式,或者有一个链接到描述这些公式的页面 这些公式不需要应用于奇异多边形或多面体。如果它们适用于简单(非相交边)凸面形状,我已经很满意了。除了顶点坐标列表之外,我不想使用其他任何东西,[(x1,y1),…,(xn,yn)]或[(x1,y1,z1),…,(xn,yn,zn)],可能按特定顺序排列 我能够阅读Fortran,C/C

我想计算一个随机多边形的面积和一个随机多面体的体积。谷歌搜索让我找到了镶嵌和蒙特卡罗方法。然而,我只对精确计算感兴趣,而对通过收敛得到的近似值不感兴趣。也许有人会背诵确切的公式,或者有一个链接到描述这些公式的页面

这些公式不需要应用于奇异多边形或多面体。如果它们适用于简单(非相交边)凸面形状,我已经很满意了。除了顶点坐标列表之外,我不想使用其他任何东西,
[(x1,y1),…,(xn,yn)]
[(x1,y1,z1),…,(xn,yn,zn)]
,可能按特定顺序排列


我能够阅读
Fortran
C/C++
Python
MATLAB
。因此,用这些语言中的任何一种编写的算法或用伪代码编写的算法都很受欢迎。

对于简单多边形,可以使用格林-黎曼公式,如下所述:

这相当于将三角形M_iOM_j的(代数)面积求和,原点为O(或任意点),当角度为正时,三角形BOA的代数面积为正

对于Polydras,您可以使用Ostrogradski公式来概括上述内容。见这里:


你可以在那里找到上述体积计算方法的回顾:

我没有你的代码,但考虑到形状是“简单且凸的”,你可以选择一个顶点,然后找到在循环通过其他顶点时形成的所有三角形的面积……对于简单的多边形,你必须用行列式计算四面体的体积。多边形也是如此(使用叉积的范数计算三角形的面积),我阅读了您关于多边形的第一个链接。太棒了,这正是我想要的。我现在要读你们关于多面体的第二个链接。我读你们关于多面体的第二个链接。我理解这个方法,但是我需要做一些后续阅读:确定一张脸的质心和一张脸的法向量。我的旧微积分书即将付诸东流;)@Aeronaelius:对于三角形面,找到质心很容易:只需平均顶点。法向量由两条边的叉积给出。是的,找到法向量很容易。但在三维空间中,法向量可以指向两个方向。在考虑凸多面体时,如何明确确定面向外的法向量?@Aeronaelius:必须按正确的顺序列出顶点,以便边的叉积具有正确的方向。看见