직선의 방정식은 일반적으로 다음과 같다.
$ax+by+c=0$
이 방정식에다가 어떤 점 (p,q)가 세 집합 중 어디에 있는지 알아보려면?
이렇게 하면 될 것 같다.
$ap+bq+c < 0$ : 왼쪽
$ap+bq+c=0$ : 직선 위
$ap+bq+c >$ 0 : 오른쪽
(여기서, 왼쪽이냐 오른쪽이냐는 전혀 시각적인 이미지가 아니며, 대충 말로 정한 값이다.)
따라서, 어떤 점 두개 (p,q)와 (r,s) 가 있을 때, 직선이 나누는 세 영역 중에서 같은 쪽에 있는지 확인하려면 다음과 같이 하면 된다.
$sgn(ap+bq+c)*sgn(ar+br+c) > 0 $ : 같은쪽
$sgn(ap+bq+c)*sgn(ar+br+c) < 0 $: 다른쪽
$sgn(ap+bq+c)*sgn(ar+br+c) = 0 $: 둘 중 한놈이 직선 위에 있는 놈이다.
그래서, 일단 벡터가 주어졌을 때 직선의 방정식을 한번 써 보자.
벡터가 (x1,y1), (x2,y2) 라고 한다면
$y=\frac{y2-y1}{x2-x1} (x1-x) +y1$
이 수식을 $ax+by+c$ 형태로 바꾸면
$a=y2-y1$
$b=x1-x2$
$c=y1*x2-x1*y2$
이 된다.
이제, 삼각형 내부에 점이 있는지 없는지 판정하는 함수를 만들 준비가 끝났다.

댓글 남기기