计算2D空间中2个点之间的距离?

时间:2014-11-20 17:02:57

标签: math 2d distance

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

但是,根据某个东西是在另一个物体的上方,下方,左侧还是右侧,公式必须有所不同?

就像,如果我在屏幕中间有一个精灵,并且在下面的某个地方有一个敌人,那么这需要更改" x2-x1" (如果敌人在上面,那么,让我们说玩家精灵是x1,敌人是x2)反过来呢?

3 个答案:

答案 0 :(得分:4)

您在上面描述的意义上的距离将始终是正值。实数的平方和总是正数,正数的平方根也总是正数。因此,无论您定义xd = x2-x1还是xd = x1-x2都无关紧要。它们只有它们的符号不同,所以它们都具有相同的绝对值,这意味着它们都是相同的值。

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

答案 1 :(得分:0)

是的,你是对的。就我而言,我必须计算2D中两点之间的距离。我把x1用于swarm,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);     如果检测到(d <= rad)%入侵者     x = intruderX;
    y =入侵者;     标题(&#39; Intruder Detected&#39;);     文本(X,Y + 5,的sprintf(&#39;入侵者&#39;));     文本(500,900,sprintf(&#39;迭代次数:%。2f&#39;,iter));     情节(群(:,1),群(:,2));     对于i = 1:Ndrones     swarm(:,9)= 100; %重新启动最小计算     结束     返回;     结束     结束%de end of de loop     [1]:http://i.stack.imgur.com/SBP27.png

答案 2 :(得分:0)

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

试试这个。它应该工作!