기타 학습/Language
[ C++ ] 충돌 알고리즘
sdoaolo
2022. 5. 20. 17:31
728x90
두 캐릭터의 충돌 여부는 피타고라스의 정리를 이용해서 간단하게 구현할 수 있다!
두 캐릭터가 원이라는 가정하에
현재 위치 x, y와 원의 반지름 r이 존재한다.
- 이때 r1 + r2는 두원의 반지름의 합이고 이 거리를 d라고 정의한다.
- 두 좌표값을 통해 두 캐릭터 위치 사이의 거리를 새로 구한다. 이 거리를 c라고 정의한다.
- c가 d보다 크면 충돌하지 않은것,
- c가 d와 같거나 작으면 충돌한것이다.
코드로 구현한것.
#include<iostream>
#include<cmath>
using namespace std;
class Character {
public:
double r;
double x;
double y;
Character(double rr, double xx, double yy) : r(rr), x(xx), y(yy) {};
};
void isCrash( Character c1, Character c2) {
double d1 = c1.r + c2.r;
double a = abs(c1.x - c2.x);
double b = abs(c1.y - c2.y);
double d2 = sqrt(a * a + b * b);
if (d1 < d2) {
cout << "충돌안함";
}
else {
cout << "충돌";
}
}
int main() {
cout.tie(NULL);
ios::sync_with_stdio(false);
// ex1 : 충돌 O
// Character c1(1, 2, 1);
// Character c2(2, 4, 2);
// isCrash(c1, c2);
// ex2 : 충돌 X
// Character c1(1, 2, 1);
// Character c2(2, 8, 2);
// isCrash(c1, c2);
// ex3 : 충돌 O
Character c1(2, 4, 2);
Character c2(2, 8, 2);
isCrash(c1, c2);
return 0;
}
이해하기 쉽게 아래에 충돌 ex 3개를 각각 그림으로 표현했다.