기하 문제를 풀 때 c++의 복소수 클래스 complex를 사용할 수 있다. 이 클래스를 이용하면 점과 벡터를 복소수 형태로 표현할 수 있고, 클래스의 기능을 이용하여 점과 벡터를 다룰 수도 있다.
typedef long long C; // 정수 좌표를 써도 되는 경우
// typedef long double C; // 정수 좌표를 쓸 수 없는 경우
typedef complex<C> P;
#define X real()
#define Y imag()
정수 계산이 정확하기 때문에 정수좌표를 사용하는 것을 권장한다.
함수
complex 클래스에는 기하 문제를 풀 때 활용할 수 있는 함수를 제공한다. long double 자료형임을 주의하자.
- abs(v)
벡터 v={x, y}의 길이를 계산하는 함수이다. sqrt(x^2+y^2)
이 함수를 이용하여 두 점 사이 거리를 구할 수도 있다. abs(b-a)
- arg(v)
벡터 v={x, y}와 x축 사이의 각의 크기를 계산하는 함수이다. 이 함수는 각의 크기를 라디안으로 반환한다.
- polar(s, a)
길이가 s이고 각도가 a라디안인 벡터를 생성하는 함수이다.
P v = {4, 2};
cout<< arg(v) <<endl; // 0.463648
v *= polar(1.0, 0.5);
cout<< arg(v) <<endl; // 0.963648
- conj(v)
벡터의 y좌표의 부호를 뒤집는 함수이다. 두 벡터의 외적 계산을 할 때 활용된다.
P a = {4,2};
P b = {1,2};
C crossProduct = (conj(a)*b).Y; // a.x*b.y-a.y*b.x = 6
다음과 같이 외적 결과를 얻을 수 있다.
>>> 벡터와 외적 활용하기
2023.05.31 - [컴퓨터공학/수학] - [기하] 벡터와 외적의 활용
'컴퓨터공학 > 수학' 카테고리의 다른 글
[기하] 스윕 라인 알고리즘(교차점, 가까운 점, 볼록껍질) | 모르면 절대 못 품 (0) | 2023.06.02 |
---|---|
[기하] 벡터와 외적의 활용 (0) | 2023.05.31 |
[알고리즘] 분할정복으로 거듭제곱 최적화하기 (0) | 2023.05.30 |
[정수론] 모듈러 연산과 증명 (0) | 2023.05.29 |
[기하] 다각형 넓이 구하는 공식 (0) | 2023.05.28 |