有人可以解释一下吗?
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
答案 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)
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.x
,Circle.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)
这就是原因。