【问题标题】:Amount of steps from one field in a grid to another, orthogonally?从网格中的一个字段正交到另一个字段的步数?
【发布时间】:2011-03-31 03:10:09
【问题描述】:

如何计算网格中从一个字段到另一个字段正交移动的“步数”?

我正在为我正在开发的游戏实现 A* 寻路系统,而这个简单的数学运算阻碍了我的工作。

我可能应该重新上三年级。哈哈。

【问题讨论】:

  • x 距离加 y 距离?我理解正确吗?

标签: c# .net math c#-4.0 mathematical-expressions


【解决方案1】:

如果我理解正确,我认为您只需将必要的 x,y 移动相加即可。给定两个点(x1,y1)(x2,y2),那么距离(假设“正交移动”意味着仅水平和/或垂直移动)则为:

abs(x1-x2) + abs(y1-y2)

例如,从位置 (1,1) 移动到 (3,4) 意味着向右移动 2 个空格,向上移动 3 个空格,总共 5 个。abs(1-3)+abs(1-4) = 2 + 3 = 5

【讨论】:

  • 你确定这个答案是正确的吗?在 Direct X 课程中,我们被教导使用勾股定理找到两个网格点之间的距离。尽管您的答案可能是不同的方法,但我希望使用两种解决方案都能找到相同的结果。当我在 (1,1) (3,4) 中输入您的数字时,我得到的结果是 4.4721 ,而不是 5。
  • @Chris:根据我对OP的理解,是正确的。他说这些动作是正交的(成直角)。从位置 (0,0) 移动到 (1,1) 这意味着移动必须是 (0,0)->(0,1)->(1,1) 或 (0,0)-> (1,0)->(1,1)。那是两个细胞的运动。在这种情况下,方格纸上的直线距离 sqrt(2) 是正确的。但据我了解 OP,这些动作并不在一条直线上。
  • 啊,谢谢马克!我的错误马克。我第一次看的时候没有注意到A*,我只是看了《A pathfinding system》,我想我应该更加小心!非常感谢您花时间澄清。
【解决方案2】:

我确实相信这是一个简单的数学问题。

当然,您知道起始 x / y 值和结束 x / y 值。要获得两者之间的距离,请执行以下操作:

dist = sqrt(dx^2 + dy^2 )

其中 dx 是点的 x 坐标之间的差 其中 dy 是点的 y 坐标之间的差。

所以,例如。假设坐标 A 是 A(15,20),坐标 B 是 B(35,5);

dx = 35 - 15 = 20; dy = 20-5 = 15;

因此;

AB = sqrt(20^2 + 15^2) 之间的距离 = 25.0 个单位。

现在,对于您的最终答案,这取决于您的程序中“步骤”的单位数。如果一个步骤是 5 个单位,则 (25/5) 比从 A 点到 B 点需要 5 个步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多