원과 원 충돌 체크하는 방법
원과 원의 출돌 체크는 매우 깔끔하게 처리할수 있다.
![](https://www.kudryavka.me/content/images/wordpress/2020/01/image-5.png)
두개의 원이 있고 반지름이 각각 R1 ,R2가 있다.
여기서 충돌했을때의 그림을 보자
![](https://www.kudryavka.me/content/images/wordpress/2020/01/image-4.png)
직관적으로 두개의 중심의 거리보다 반지름의 합보다 작은걸 알수있다.
좀더 자세히 보기위해 태그를 추가했다.
![](https://www.kudryavka.me/content/images/wordpress/2020/01/image-6.png)
두 거리는 아래의 공식으로 쉽게 구할수 있다.
![](https://www.kudryavka.me/content/images/wordpress/2020/01/CodeCogsEqn-2-1.gif)
거기에 두개의 반지름의 합보다 거리의 값이 작으면 충돌이 발생했다는 것이다.
![](https://www.kudryavka.me/content/images/wordpress/2020/01/CodeCogsEqn-1-1.gif)
하지만 이와같은식 을 컴퓨터로 구현할려면 Sqrt라는 써야하는데 이 함수는 컴퓨팅 파워를 많이써야하고 근사치이기 때문에 전체를 제곱하여 루트를 없애주자
![](https://www.kudryavka.me/content/images/wordpress/2020/01/CodeCogsEqn.gif)
컴퓨터 공학에서는 아래와 같은 코드를 작성할수 있다.
Vector2 diff = a.GetCenter() - b.GetCenter();
float centerLength = diff.LengthSq();
float radiiSq = a.GetRadius() + b.GetRadius();
radiiSq *= radiiSq;
return centerLength <= radiiSq;