查找一组点是否可以形成正多边形?

时间:2014-09-16 10:25:02

标签: java android math

有没有办法找出给定的设定点是否可以形成正多边形?我想,如果这些点可以形成正六边形,我想要找出6个点

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:1)

  1. 找到中心:

    求和所有x坐标和所有y坐标,并将两个总和除以点数以得到中心点的坐标(我们称之为 C )。

  2. 检查所有点与 C 的距离是否相同。如果没有,那就不常见了,你就完成了。允许小的差异,因为浮点值的精确度有限。

  3. 计算以 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)的倍数在该区间内只有一个角度。但是,由于你需要在计算中允许小的误差,你需要找到最小的角度并移动所有的间隔,使这个角度位于第一个间隔的中间(你绝对不希望角度在区间边界)。

  4. 这样你就可以得到渐近最佳时间的结果,即O(n),其中n是点数。