일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 백준 알고리즘
- 데이터베이스
- java
- 1과목
- python
- C++
- MYSQL
- 정보처리산업기사
- 백준알고리즘
- 코틀린
- 문제풀이
- 소프티어
- 시나공
- 백준
- kotlin
- 프로그래머스
- SQL
- 자바
- SW봉사
- BFS
- 회고
- 스프링
- 코딩봉사
- 코딩교육봉사
- 알고리즘
- CJ UNIT
- 파이썬
- softeer
- 공부일지
- programmers
Archives
- Today
- Total
JIE0025
[ C++ ] 충돌 알고리즘 본문
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개를 각각 그림으로 표현했다.
'기타 학습 > Language' 카테고리의 다른 글
[ C++ ] sort , stable_sort (0) | 2022.05.20 |
---|---|
[ C++ ] 삼각형의 성립 조건 (0) | 2022.05.20 |
[ C++ ] 문자열을 숫자로 (stoi, stof, stol, stod) (0) | 2022.05.19 |
[ C++ ] 문자열 치환 replace, regex_replace (0) | 2022.05.19 |
[ C++ ] 동적 할당 깊이 파기 (구조 이해) (0) | 2022.05.18 |