0

我在 3D 系统上有两个位置,比如 [15, 32, 42] 和 [16, 32, 42]

有没有一种简单的方法可以检查它们是否在彼此之间 1 个街区的半径范围内?

这就是我所拥有的,但有没有更好的方法:

if (pos[0] == pos1[0] / 32 || pos[0] == pos1[0] + 1 || pos[0] == pos1[0] - 1)
{
    if (pos[1] == pos1[1] || pos[1] == pos1[1] - 1 || pos[1] == pos1[1] + 1)
    {
        if (pos[2] == pos1[2] || pos[2] == pos1[2] + 1 || pos[2] == pos1[2] - 1)
        {

谢谢,大卫

4

2 回答 2

0

您可以使用Math.abs(pos[0]-pos1[0]) <= 1检查同一平面中的两个坐标是否最多相距 1。

总而言之,您的代码可能如下所示:

if( Math.abs(pos[0]-pos1[0]) <= 1 
    && Math.abs(pos[1]-pos1[1]) <= 1 
    && Math.abs(pos[2]-pos1[2]) <= 1 )
{
  Within a 1 block radius
}

请注意,我不明白您为什么将第一个等式除以 32。我没有将其包含在此答案中。

另请注意,此解决方案使事情更具可读性,但您的解决方案也是正确的。

于 2012-04-22T07:17:55.493 回答
0

我没有在 c# 中这样做,但在 Java 中我使用 JTS。http://geoapi.codeplex.com/似乎在 c# 中提供了相同的功能。然后,您将把您的点表示为 Point 对象,并使用各种有用的地理空间功能。

但是对于这种情况,您是在寻找“如乌鸦飞翔”的距离,即毕达哥拉斯,还是寻找“步行距离”,这将涉及在人行道的有向图中找到最短的有效路线?

朱利安

于 2012-04-22T07:22:26.383 回答