定位球面多边形的质心(重心)

11 浏览
0 Comments

定位球面多边形的质心(重心)

我正在尝试找出如何最好地定位覆盖在单位球上的任意形状的质心,输入是形状边界的有序(顺时针或逆时针)顶点。边界上的顶点密度不规则,因此它们之间的弧长通常不相等。由于形状可能非常大(半个半球),通常无法简单地将顶点投影到平面并使用平面方法,如维基百科上所述(很抱歉,作为新手,我不允许超过2个超链接)。稍微好一点的方法涉及在球坐标中使用平面几何来处理,但是对于大的多边形,此方法会失败,正如这里所示。在同一页上,“Cffk”强调了这篇论文,该论文描述了计算球面三角形质心的方法。我尝试实现这种方法,但没有成功,希望有人能发现问题?

为了方便比较,我保持了与论文中相似的变量定义。输入(数据)是一组经度/纬度坐标,代码将其转换为[x,y,z]坐标。对于每个三角形,我任意固定一个点为+z极点,另外两个顶点由沿多边形边界的相邻点对组成。代码沿边界行进(从任意点开始),依次使用多边形的每个边作为三角形边。为每个这些单独的球面三角形确定一个子质心,并根据三角形面积加权并相加以计算总多边形质心。运行代码时不会出现任何错误,但是返回的总质心明显是错误的(我运行了一些非常基本的形状,其中质心位置是明确的)。我没有在返回的质心位置找到任何合理的模式...所以目前我不确定是什么出了问题,可能是数学或代码(尽管,怀疑是数学)。

如果您想尝试,下面的代码应该可以直接复制粘贴。如果已安装matplotlib和numpy,则会绘制结果(如果未安装,则会忽略绘图)。您只需要将代码下方的经度/纬度数据放入名为example.txt的文本文件中。

非常感谢您提供的任何建议或见解。

编辑:下面是一个图,显示了一个投影到单位球上的多边形和从代码计算出的质心。显然,质心是错误的,因为多边形相当小且凸,但质心却落在其周边之外。

编辑:这是一组与上述非常相似的坐标,但是以我通常使用的原始[经度,纬度]格式(现在由更新的代码转换为[x,y,z])。

编辑:另外几个例子...通过4个顶点定义的以[1,0,0]为中心的完美正方形,我得到了预期的结果。然而,从非对称三角形中,我得到的质心完全不正确...质心实际上落在了球体的另一侧(在此投影到前侧作为反点)。

有趣的是,质心估计在某种意义上是“稳定的”,如果我反转列表(从顺时针顺序变为逆时针顺序或反之亦然),质心也完全反转。

0