检查点是否在钻石内的有效方法

时间:2016-11-17 22:33:20

标签: algorithm

我有一个如图所示的钻石阵列,我知道每颗钻石的位置以及从钻石原点到任何顶点的距离(它们距离中心的距离都相同)。我也有一点意见。鉴于这些信息,找到哪一颗钻石的最有效方法是什么。

我知道我可以检查点与每颗钻石位置的距离,但这似乎太麻烦了,因为我必须多次这样做。

enter image description here

此外,这应该不重要,但我使用C#和Unity 3D来执行此操作。

2 个答案:

答案 0 :(得分:3)

如果您的钻石形成如图片中的常规图案,则只需执行坐标转换,将整个事物旋转45度CW或CCW(0,0)作为原点。之后,问题变得微不足道:在常规正交网格中定位一个点。

答案 1 :(得分:0)

钻石边界线有方程式

x + y = a0 + u * Size
y - x = b0 + v * Size

其中a0,b0是基础菱形的某些顶点的坐标(具有单元格坐标0,0),u和v是单元格坐标,大小是边长。因此,要查找钻石点(px,py)属于哪个,您可以计算

u = Floor((px + py - a0) / Size))
v = Floor((py - px - b0) / Size))