(알고리즘) 기하파트-1
//atan2함수 참고: http://warmz.tistory.com/entry/CC-atan2double-y-double-x-함수
//acos(0.0)은 파이/2를 의미한다. 왜냐하면 코사인함수가 0을 만나는 x축좌표가 파이/2인 지점이다.
const double PI=2.0*acos(0.0);
--> 외적의 주된 사용처는 두 벡터의 방향성을 판단하는 것입니다. 두 벡터 a,b의 외적 axb가 양수라면 b가 a로부터 반시계방향으로 180도 이내에 있음을 알 수 있고, 음수라면 시계방향으로 180도 이내에 있음을 알 수 있습니다.
-->ccw를 이용하면 좌표만으로 대답하기 힘든 여러 질문들에 쉽게 대답 할 수 있습니다.
세 점 a,b,c를 가리키는 세 벡터 a,b,c가 있다고 하자. 이떄, a,b,c를 순서대로 잇는 두 선분은 b에서 왼쪽으로 꺽을까요, 오른쪽으로 꺽을까요?
좌표들만으로는 계산하기 힘들지만 ccw(a,b,c)를 이용하면 쉽게 알 수 있다.
이 값이 양수라면 c가 b의 반시계 방향에 있는 것이니 좌회전이고, 아니면 우회전이나 직진이다.
물론 ccw()함수는 벡터의 극 각도를 계싼하는 polar()로 작성할수 있지만 외적을 사용하는 것이 훨씬 속도가 빠르고 수치적으로 안정적이다.
//acos(0.0)은 파이/2를 의미한다. 왜냐하면 코사인함수가 0을 만나는 x축좌표가 파이/2인 지점이다.
const double PI=2.0*acos(0.0);
--> 외적의 주된 사용처는 두 벡터의 방향성을 판단하는 것입니다. 두 벡터 a,b의 외적 axb가 양수라면 b가 a로부터 반시계방향으로 180도 이내에 있음을 알 수 있고, 음수라면 시계방향으로 180도 이내에 있음을 알 수 있습니다.
-->ccw를 이용하면 좌표만으로 대답하기 힘든 여러 질문들에 쉽게 대답 할 수 있습니다.
세 점 a,b,c를 가리키는 세 벡터 a,b,c가 있다고 하자. 이떄, a,b,c를 순서대로 잇는 두 선분은 b에서 왼쪽으로 꺽을까요, 오른쪽으로 꺽을까요?
좌표들만으로는 계산하기 힘들지만 ccw(a,b,c)를 이용하면 쉽게 알 수 있다.
이 값이 양수라면 c가 b의 반시계 방향에 있는 것이니 좌회전이고, 아니면 우회전이나 직진이다.
물론 ccw()함수는 벡터의 극 각도를 계싼하는 polar()로 작성할수 있지만 외적을 사용하는 것이 훨씬 속도가 빠르고 수치적으로 안정적이다.
댓글
댓글 쓰기