티스토리 뷰

실제 수치의 계산은 Matlab과 언어 호환성이 있는 GNU  프로그램인 octave를 이용하였다.


삼각형 면적의 일반 공식



삼각형의 면적을 구하는 공식은 아주 단순하다. 제일 초급 공식이 밑변과 높이가 주어졌을 때 쓰는 (밑변 * 높이)/2 가 있다.


양변의 길이와 두 변 사이의 각이 주어졌을 때는

이 단순해 보이는 문제가 실제로는 그렇게 간단하지 않다. 현실에서 문제를 해결할 때는 대부분 저런 값들이 안 주어진다. 각 변의 길이와 변 사이의  각을  스스로 찾아야 한다. 3점의 좌표가 주어졌을 때 그 세 점이 만드는 삼각형의 면적을 구하는 문제를 생각해 보자.

이 문제를 푸는 방법은 기울기를 구하는 초급 수학 기술부터 벡터의 cross product나 적분을 활용하는 방법까지 다양하다.


(1) 직선의 기울기



가장 기초적인 방법으로는 바로 위에 소개한 두 변 사이의 각을 활용한 공식을 이용하는 것이다. 사이 각은 점 (0,0)과 점 (3.1)을 잇는 직선의 기울기 그리고 점(0,0)과 점(1,2)를 직선의 기울기를 구한 후 기울기의 actan 값으로 직선과 X축이 이루는 각을 구한 후 두 각의 차이를 계산하면 된다.

actan(1/3)=0.32175

actan(2/1)=1.1071

두 직선이 이루는 각은 = 1.1071 - 0.32175 = 0.78535

두 변 사이의 각을 구했으므로 두 직선의 길이를 구한 후 위의 공식에 대입하면 삼각형의 면적을 구할 수 있다.


(2) 복소수의 활용



두 직선 사이의 각은 또한 복소수를 활용해 구할 수 있다. 2차원 좌표 값을 복소수로 일단 바꾼다.

(0,0)(1,2)= 1+2i

(0,0)(3,1) = 3+i

두 복소수 사이의 위상 차는 두 수를 나누어 구한 수의 회전각이다.

actan(0.5/0.5) = 0.78535

octave:25> (1+2i)/(3+i)
ans =  0.50000 + 0.50000i
octave:28> atan(0.5/0.5)
ans =  0.78540


(3) 벡터 내적(inner product)



다른 방법은 벡터 내적(inner product)를 활용하는 방법이다.

A = 1x+2y

B = 3x + y

acos(0.70711) = 0.78535

octave:30> A=[1 2]
A =

   1   2

octave:31> B=[3 1]'
B =

   3
   1
octave:37> (A*B)/(norm(A)*norm(B))
ans =  0.70711


(4) 벡터의 곱(cross product)



삼각형의 면적을 구하기 위해서 꼭 두 변 사이의 각을 찾아야 하는 것은 아니다. 두 벡터의 곱(cross product)은 두 벡터가 이루는 평형 사변형의 면적을 길이로 하고 두 벡터에 수직인 방향을 갖는 벡터를 산출한다. 벡터의 곱을 구하기 위해서는 두 벡터가 3차원 벡터이어야 한다. 따라서  2차원 평면의 이 벡터들을 Z=0인 3차원 벡터로 생각하고 변환하여 벡터 곱을 연산한다.


octave:38> A=[1 2 0]
A =

   1   2   0

octave:39> B=[3 1 0]
B =

   3   1   0
octave:40> cross(A,B)
ans =

   0   0  -5

|AxB|는 평행 사변형의 넓이이므로 그 값의 반이 삼각형의 면적이다. 따라서 삼각형의 면적은 5/2= 2.5이다.


(5) 적분(integral)



적분이 원래 면적을 구하기 위해 고안 되었으니 면적 계산에 적분을 동원하는 것이 이상한 것은 아니지만  후보군으로 떠올리기는 쉽지 않다. 적분으로 구하기 위해 직선 3개의 방정식이 필요하다.

두 점이 주어졌을 때 사용하는 직선의 방정식 공식은 다음과 같다.

점(0,0) 과 점(1,2)가 이루는 직선의 방정식

     (1)

점(0,0) 과 점(3,1)가 이루는 직선의 방정식

     (2)

점(1,2) 과 점(3,1)가 이루는 직선의 방정식

     (3)

삼각형의 면적을 구하기 위한 적분 방정식은 다음과 같다.


octave:46>  x = 0:0.1:1;
octave:47> y=2*x-(1.0/3.0)*x;
octave:48> trapz(x,y)
ans =  0.83333
octave:49> x = 1.0:0.1:3.0;
octave:50> y=(-1.0/2.0)*x+(5.0/2.0)-(1.0/3.0)*x;
octave:51>  trapz(x,y)
ans =  1.6667
octave:52> 0.83333 + 1.6667
ans =  2.5000

지금까지 다양한 방법으로 3점의 좌표가 주어졌을 때 그 3점의 좌표가 이루는 삼각형의 면적을 구하는 방식을 살펴 보았다. 적분과 같이 인간이 풀기에는 다소 불편한 방식도 있지만 컴퓨터로 풀게 되면 큰 차이가 없다.  그래도 벡터의 cross product가 컴퓨터를 이용하든 공책과 연필을 이용하여 풀던 가장 간단한 방법으로 보인다. 컴퓨터의 강력한 계산력을 보유한 지금은 계산의 복잡도는 크게 중요하지 않다. 오히려 프로그램 소스의 가독성이 더 중요하다. 예전에 공대생들은 좁고 깊게 배우고 인문대생들은 넓고 얇게 배운다고 했는데 그것도 옛말이 되었다. 공대생들도 넓고 얇게 배울 필요가 있다. 그래서 문제를 해결하기 위해 필요한 방법들을 넓게 검토하고 자신의 필요에 가장 적절한 방법을 찾는 것이 중요하다. 도구가 선택된 뒤 필요한 경우 그 때 깊게 공부하는 것이 정보의 홍수 시대에 가장 능률적인 해결책이지 않을까 생각한다.

댓글
공지사항
최근에 올라온 글
TAG
more
«   2024/05   »
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
글 보관함