检查是否在1“块”半径内相交

时间:2012-04-22 07:11:27

标签: c#

我在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)
        {

谢谢, 大卫

2 个答案:

答案 0 :(得分: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.我在这个答案中没有包含它。

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

答案 1 :(得分:0)

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

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

儒略