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

本文关键字:是否 检查 | 更新日期: 2023-09-27 18:32:03

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

谢谢大卫

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

您可以使用

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。我在这个答案中没有包括这一点。

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

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

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

朱利安