C++ 计算球面多边形面积?

C++ 计算球面多边形面积?,c++,math,C++,Math,我已经使用“吉拉德定理””来计算具有大圆边的球形多边形的面积,如前一节所述 在大多数情况下,它工作正常,但我遇到了一个负面积的情况。逆时针方向这些顶点的坐标(lon/lat)为(弧度): 5.240747351 1.016447132 5.268216612 1.067869338 5.216315614 1.072132414 5.129855176 1.00109075 5.08083026 0.950935874 5.134615486 0.9460488828 我使用NCL绘制了多边形(

我已经使用“吉拉德定理””来计算具有大圆边的球形多边形的面积,如前一节所述

在大多数情况下,它工作正常,但我遇到了一个负面积的情况。逆时针方向这些顶点的坐标(lon/lat)为(弧度):

5.240747351 1.016447132

5.268216612 1.067869338

5.216315614 1.072132414

5.129855176 1.00109075

5.08083026 0.950935874

5.134615486 0.9460488828

我使用NCL绘制了多边形(抱歉,我现在无法发布图像:()


如您所见,内角4接近180度(179.77708422692623)。计算出的多余度为-0.16533548347651544度。有什么想法吗?如果您需要查看代码,我可以稍后发布。:)

我已经解决了!由于“acos”的值范围为[0,PI],因此有问题的内角不是~179而是~181。因此,应该对每个角度进行一些判断(无论计算的角度是内部还是外部)。

我已经算出了!由于“acos”的值范围为[0,PI],因此有问题的内角不是~179而是~181。因此,应该对每个角度进行一些判断(无论计算的角度是内部还是外部)。

我真的不明白你的意思。问题是什么?如果你在某个方面有0.1度的误差,你可能必须修改计算中使用的精度。我要问的问题是,为什么在这种情况下我会得到“负”面积。我用了“双面”类型。我想你的标题中有一个矛盾修饰法:一个球体有一面,但一个多边形意味着“多面”。此外,对于三维对象来说,它是体积而不是面积。“球形多边形”意味着嵌入球体表面的多边形,请参见。没有矛盾的地方,这是真正的“区域”。我真的不明白你的意思。问题是什么?如果你在某个方面有0.1度的误差,你可能必须修改计算中使用的精度。我要问的问题是,为什么在这种情况下我会得到“负”面积。我用了“双面”类型。我想你的标题中有一个矛盾修饰法:一个球体有一面,但一个多边形意味着“多面”。此外,对于三维对象来说,它是体积而不是面积。“球形多边形”意味着嵌入球体表面的多边形,请参见。没有矛盾的地方,这是真正的“区域”。