一尘不染

是正六边形内的一个点

algorithm

我正在寻找最佳方法的建议。我正在尝试查找给定的点A:(a,b)是否在正六边形内,并定义为中心O:(x,y)和外接圆的直径。

在这种简单情况下,使用射线投射或绕组数来确定这一点似乎有点过头了,而我目前正在寻找一种选择,即找到OA线(与水平方向)的角度并“归一化”
(可能不是正确的单词)将其放入6个等边三角形之一,并查看此新点是否位于该三角形内。

我感到自己缺少一些简单的东西,并且有一种简单而有效的方法(或者,如果我真的很幸运,可以使用Java API)。

谢谢你的帮助。

编辑 :六边形的方向使得侧面之一与水平方向齐平。


阅读 484

收藏
2020-07-28

共1个答案

一尘不染

您可以对六边形的每一个边使用方程式。通过它们,您可以确定给定点是否在与六边形中心相同的半平面中。

例如,右上角具有以下等式:

-sqrt(3)x - y + sqrt(3)/2 = 0

在此插入点的坐标,然后插入中心的坐标。如果结果具有相同的符号,则该点位于左下半平面(因此它可能在六边形内部)。

然后,使用其他方面的方程式进行重复。
注意,该算法适用于 任何凸多边形

2020-07-28