从维基百科:
由n个顶点(x 0,y 0),(x 1,y 1),...,(x n-1,y n-1)定义的非自相交闭合多边形的质心是点(C x,C y),其中
其中A是多边形的有符号区域,
在这些公式中,假定顶点按照沿多边形周长的出现顺序进行编号。此外,假设顶点(x n,y n)与(x 0,y 0)相同,这意味着在最后一种情况下i + 1必须循环到i = 0。请注意,如果按顺时针顺序对点进行编号,则按上述方法计算的面积A将带有负号;但是即使在这种情况下,质心坐标也将是正确的。
- 给定顶点列表的顺序(顺时针或逆时针),找到由顶点表示的非自相交封闭多边形的质心。
- 如果有帮助,您可以假定输入仅是CW或仅是CCW。如果需要,请在回答中说出这一点。
- 坐标不需要为整数,并且可以包含负数。
- 输入将始终有效,并且至少包含三个顶点。
- 只需要处理适合您语言的本机浮点数据类型的输入即可。
- 您可以假设输入数字将始终包含小数点。
- 您可以假设输入整数以
.
或结尾.0
。 - 您可以使用复数进行输入。
- 输出应精确到最接近的千分之一。
例子
[(0.,0.), (1.,0.), (1.,1.), (0.,1.)] -> (0.5, 0.5)
[(-15.21,0.8), (10.1,-0.3), (-0.07,23.55)] -> -1.727 8.017
[(-39.00,-55.94), (-56.08,-4.73), (-72.64,12.12), (-31.04,53.58), (-30.36,28.29), (17.96,59.17), (0.00,0.00), (10.00,0.00), (20.00,0.00), (148.63,114.32), (8.06,-41.04), (-41.25,34.43)] -> 5.80104769975, 15.0673812762
要在坐标平面上看到每个多边形,请在此页面的“编辑”菜单中粘贴不带方括号的坐标。
我使用这个“ 多边形质心点计算器”确认了我的结果,这太糟糕了。我找不到一个可以一次输入所有顶点的文件,或者第一次输入时没有试图擦除它的-
符号。在人们有机会回答之后,我将发布我的Python解决方案供您使用。
x
s和y
s取平均值,会将所有权重放在顶点上,而不是分布在整个身体上。第一个碰巧因为它是有规律的而起作用,所以这两种方法最终都出现在对称中心。第二个方法起作用,因为对于三角形,这两种方法都指向同一点。