有没有办法找出给定的设定点是否可以形成正多边形?我想,如果这些点可以形成正六边形,我想要找出6个点
提前感谢您提供任何帮助
答案 0 :(得分:1)
找到中心:
求和所有x坐标和所有y坐标,并将两个总和除以点数以得到中心点的坐标(我们称之为 C )。
检查所有点与 C 的距离是否相同。如果没有,那就不常见了,你就完成了。允许小的差异,因为浮点值的精确度有限。
计算以 C 为中心的极坐标系中所有点的角度。对于点p,您可以使用Math.atan2(P.y-C.y, P.x-C.x)
来获得角度。当且仅当所有角度都不同并且这些角度之间的所有差异都是(Math.PI*2) / (number of points)
的倍数时,多边形是规则的。(我将这个值称为d
)。当然,你不会得到准确的值。
注意:您可以通过检查a)检查每个区间{{1}的d
和b)的所有其他角度的差异是[-pi, -pi+d), [-pi+d, -pi+2*d), [-pi+2*d, -pi+3*d), ..., [pi-d, pi]
和b)的倍数在该区间内只有一个角度。但是,由于你需要在计算中允许小的误差,你需要找到最小的角度并移动所有的间隔,使这个角度位于第一个间隔的中间(你绝对不希望角度在区间边界)。
这样你就可以得到渐近最佳时间的结果,即O(n)
,其中n是点数。