【问题标题】:Calculating the distance between 2 points in 2D Space?计算二维空间中两点之间的距离?
【发布时间】:2014-11-20 17:02:57
【问题描述】:

所以公式基本上是: xd = x2-x1 yd = y2-y1 距离 = sqrt(xd * xd + yd * yd)

但是根据某物是在另一个对象的上方、下方、左侧还是右侧,公式肯定会有所不同吗?

例如,如果我在屏幕中间有一个精灵,而在下方某处有一个敌人,那是否需要更改“x2-x1”(假设玩家精灵是 x1,敌人是 x2)以另一种方式如果敌人在上面呢?

【问题讨论】:

  • 通过几个简单的例子,也许在方格纸上,你会很容易自己弄清楚。
  • 虽然它对“正常大小”的数字没有影响,但我认为值得养成使用数学库函数 hypot 的习惯,即改用 hypot(x2-x1,y2-y1) .

标签: math 2d distance


【解决方案1】:

您上面描述的距离总是一个正值。实数的平方和总是正数,正数的平方根也总是正数。所以,定义xd = x2-x1 还是xd = x1-x2 都没有关系。它们仅在符号上有所不同,因此两者具有相同的绝对值,这意味着它们都平方成相同的值。

所以,这里没有任何特殊情况。距离度量的制定可以解决您提出的所有问题。

【讨论】:

    【解决方案2】:

    Math.Sqrt(Math.Pow (a.X-b.X, 2) + Math.Pow (a.Y-b.Y, 2));

    试试这个。它应该工作!

    【讨论】:

      【解决方案3】:

      是的,你说的很对。就我而言,我必须计算二维中两点之间的距离。我将 x1 用于群,x2 用于沿 X 轴的入侵者,将 y1 用于入侵者,将 y2 用于沿 Y 轴的群。 d=sqrt((swarm(de,1) - (intruderX)).^2 + (swarm(de,2)-intruderY).^2); [距离计算不准确,我想当入侵者进入任何群体粒子的圆圈内时,必须被检测到][1],有时,入侵者进入圆圈内但未被检测到。这是我的问题。任何解决我问题的人都会非常感谢他们。 对于 de = 1:Ndrones
      d = sqrt((swarm(de,1) - (intruderX)).^2 + (swarm(de,2)-intruderY).^2); if(d y = 入侵者Y; title('检测到入侵者'); text(x,y+5,sprintf('入侵者')); text(500,900,sprintf('Iterations: %.2f',iter)); 情节(群(:,1),群(:,2)); 对于 i=1:Ndrones 群(:,9)= 100; %重新开始最小计算 结尾 返回; 结尾 end % 循环结束 [1]:http://i.stack.imgur.com/SBP27.png

      【讨论】:

      • 嗨 Gul Rukh Khan,欢迎来到 Stack Overflow。您的答案看起来很透彻,但很难阅读;你可以格式化它以使其更清晰吗?您应该能够分离出代码 sn-ps 并使用 markdown 使答案的不同部分更清晰。
      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多