C ++计算两个圆之间的距离

时间:2012-09-21 18:36:37

标签: c++ math

有人可以解释一下吗?

double distance( int x1, int y1, int x2, int y2 )
{
    //Return the distance between the two points
    return sqrt( pow( x2 - x1, 2 ) + pow( y2 - y1, 2 ) );
}
bool check_collision( Circle &A, Circle &B )
{
    //If the distance between the centers of the circles is less than the sum of their radii
    if( distance( A.x, A.y, B.x, B.y ) < ( A.r + B.r ) )
    {
        //The circles have collided
        return true;
    }

    //If not
    return false;
}

我不知道这段代码如何

//Return the distance between the two points
return sqrt( pow( x2 - x1, 2 ) + pow( y2 - y1, 2 ) );

返回两个圆圈之间的距离。代码来自http://lazyfoo.net/SDL_tutorials/lesson19/index.php

5 个答案:

答案 0 :(得分:5)

sqrt( pow( x2 - x1, 2 ) + pow( y2 - y1, 2 ) )

返回圆心之间的欧氏距离。作为一个公式,这个距离就是

sqrt((a1-b1)^2 + (a2-b2)^2)

其中(a1,a2)和(b1,b2)是2个圆圈的中心。

答案 1 :(得分:3)

它不会返回圆圈之间的距离,它会执行它所说的“返回两点之间的距离”与普通的Cartesean距离计算。程序员然后传递两个圆圈的中心

然后程序员减去两个半径以获得圆圈之间的距离。他只是在没有真正费心去减去他只是比较,而是因为(s)他只对碰撞和无碰撞决定感兴趣。

答案 2 :(得分:2)

原点和点(x,y)之间的

Euclidean distance由:

定义
d = (x2 + y2)(1/2)

所以中心点之间的距离p 1 =(x 1 ,y 1 )和p 2 =(x 2 ,y 2 )是通过平移整个系统给出的,因此一个中心点位于原点,而另一个中心点的距离是计算。我们这样做:

d = |p2 - p1|2
  = ((x2-x1)2 + (y2-y1)2)(1/2)

在C ++中,这通常看起来像

return sqrt( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );

然而,在这种情况下,作者似乎正在使用pow(b, e)函数,该函数接受第一个参数b,并将其提升到第二个参数的幂,{ {1}}获取e

答案 3 :(得分:1)

它返回圆心之间的距离。假设Circle.xCircle.y代表中心。这用于计算的其余部分以检查碰撞。

答案 4 :(得分:1)

使用Pithagroas关于直角三角形的定理可以推断出两点的距离。在Descartes的坐标系中,如果定义两个点:P1(x1,y1)和P2(x2,y2),那么它们之间会有一个直角三角形:

^ y
|
|
|
|
+ ---------x P1(x1, y1) = (12, 8)
|          |
|          | 
|          | 
+----------x-I-------x P2(x2, y2) = (24, 4)
|          |         |
|          |         |
|          |         |
+------------------------------------------------> x

现在P1, P2, I三角形在其I处有一个直角。所以Pithagoras的定理适用于:

c ^ 2 = a ^ 2 + b ^ 2
distance ^ 2 = (x1 - x2) ^ + (y2 - y1) ^ 2
since n ^ 2 equals (-n) ^ 2 we can finally write:
distance = sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2)

这就是原因。