2014-11-20 295 views
1

所以公式基本上是: XD = X2-X1 收率= Y2-Y1 距离=开方(XD * XD + YD * YD)计算二维空间中两点之间的距离?

但可以肯定的公式有根据的东西是否是不同的在另一个物体的上方,下方,左侧或右侧?如果我在屏幕中间有一个精灵,并且在下面的某个地方有一个敌人,那么需要改变“x2-x1”(让我们说玩家精灵是x1,敌人是x2),另一个如果敌人在上面而不是绕过呢?

+1

通过几个简单的例子,也许在方格纸上,你可以很容易地找到自己。 – 2014-11-20 17:10:15

+0

虽然它对于'正常大小'的数字没有什么区别,但我认为它值得使用数学库函数hypot的习惯,即使用hypot(x2-x1,y2-y1)代替。 – dmuir 2014-11-20 18:22:57

回答

4

您在上面描述的意义上的距离总是正值。实数的平方和总是正数,正数的平方根也总是正数。因此,您是否定义了xd = x2-x1xd = x1-x2并不重要。它们只是因它们的符号而有所不同,因此它们都具有相同的绝对值,这意味着它们都是相同的值。

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

+0

啊,谢谢。这就说得通了。 – StallMar 2014-11-20 17:18:37

0

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

+1

嗨Gul Rukh Khan,欢迎来到Stack Overflow。你的回答看起来很彻底,但是很难阅读;你可以格式化它,使其更清晰?您应该能够分离出代码片段并使用降价来让您的答案的不同部分更清晰。 – 2016-08-17 12:36:58

0

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

试试这个。它应该工作!