레이블이 삼각형인 게시물을 표시합니다. 모든 게시물 표시
레이블이 삼각형인 게시물을 표시합니다. 모든 게시물 표시

2007년 11월 16일 금요일

사각형의 무게중심 계산법

삼각형의 무게중심 구하는 법은 다들 아시죠?

각 꼭지점에서 마주보는 변의 중점으로 선을 그엇을 때 만나는 점입니다.
좌표(x1,y1)-(x2,y2)-(x3,y3)으로 표현된 경우에는 ((x1+x2+x3)/3. (y1+y2+y3)/3)으로 간단하게 계산할 수도 있습니다.

특징은 중학교 수학책을 참고하시고...

갑자기 궁금해져서 사각형의 무게중심을 구하는 방법을 찾아봤습니다.
사용자 삽입 이미지


의외로 어렵더군요.
오른쪽 그림과 같이 사각형을 두 개의 삼각형으로 쪼갭니다.
(물론 서로 마주보는 두 꼭지점을 연결해야죠)

그러면 삼각형 둘로 나뉘는데,
각각 삼각형의 무게중심을 구합니다.

왼쪽에 있는 삼각형을 A, 오른쪽을 B라고 하면 오른쪽과 같은 그림이 나오게 됩니다. GA는 A의 무게중심, GB는 B의 무게중심입니다.
다음은 GA-GB를 잇는 선분을 면적의 역수로 내분한 점을 찾으면 됩니다.

즉, A의 면적이 4, B의 면적이 1이라고 하면 GA-GB1:4로 내분한 점이 사각형의 무게중심이 됩니다. (4:1이 아닙니다. 그렇게 되면 큰 삼각형 쪽으로 중심이 잔뜩 쏠릴 겁니다)

역시 수학의 세계는 오묘하기 짝이 없습니다~

2차원에서 임의의 한 점이 삼각형 내부에 있는지 판별하는 방법

프로그램 하나를 쪼물딱러리며 만들고 있는데,
임의의 한 점이 삼각형 내부에 있는지 판별하는 방법이 궁금해졌습니다.

이리저리 복잡하게 판단할 수도 있겠지만, 수학적으로 아름다운 방법이 없을까 찾아봤습니다.

그러다가 http://www.mathlove.org/pds/mathqa/faq/geometry/geometry49.html 에서 아래와 같은 답을 찾았습니다.

A=(x_1, y_1), B=(x_2, y_2), C=(x_3, y_3)라고 하고 주어진 점을 (a, b)라고 합시다. 그러면 삼각형의 내부는 아래 세 영역의 교집합입니다.

1. 직선 AB에 의해서 나뉘어 지는 두 영역 중에서 점 C가 속한 영역
2. 직선 BC에 의해서 나뉘어 지는 두 영역 중에서 점 A가 속한 영역
3. 직선 CA에 의해서 나뉘어 지는 두 영역 중에서 점 B가 속한 영역

예를 들어 1의 조건을 식으로 써보면, 직선 AB의 식은

f(x,y) = (x-x_1)(y_1-y_2)-(y-y_1)(x_1-x_2) = 0

이므로 점 C와 P가 같은 영역에 속하는지의 여부는 값

f(x_3, y_3)f(a, b)

의 부호를 살펴보면 됩니다. 양수이면 같은 영역, 음수이면 서로 다른 영역입니다. 이런 식으로 세번의 부등식 판별을 거치면 됩니다.


그 밑에는 간단하게 작성된 C 코드도 있더군요. 대단대단~
그런데, 조금 더 찾아보니 http://gpgstudy.com/forum/viewtopic.php?t=15797&sid=b280649b74e383b21261d6ec8426c5e1 에서 아래와 같은 어마어마한 내용을 찾았습니다.

삼각형이 v1, v2, v3 세점으로 이루어져 있을때
d1 = v2 - v1
d2 = v3 - v1

테스트 하고자 하는 점을 k 라고 할때
p = k - v1

그려면 2차원 상의 한 점 p는 d1과 d2의 선형 합으로 나타낼 수 있습니다.
t1 * d1 + t2 * d2 = p
위의 식을 연립 방정식으로 풀면 t1과 t2를 얻을 수 있습니다.

점 k가 삼각형 내에 있으려면

0 <= t1 <= 1
0 <= t2 <= 1
t1 + t2 <= 1

이 세가지 조건을 만족하면 됩니다.


수학의 세계는 너무나 아름답습니다.  수많은 수학자 여러분께 감사하단 인사를 드립니다. 꾸바닥!