'프로그래밍/수학'에 해당되는 글 1건

  1. 2012.01.12 [수학] 벡터의 덧셈, 뺄셈, 내적과 외적, 그리고 길이 연산 방법.. 2

3d를 표현함에 있어서, 벡터와 행렬은 뗄래야 뗄 수없는 관계이다. 이 2가지를 가지고, 실제가 아닌 가상의 세계를 표현해 내기 때문이다..

일단 행렬은 제껴두고, 벡터를 가지고, 3d를 만들면서 가장 많이 쓰는 내적과 외적, 그리고 길이를 구하는 연산이 어떻게 이루어 지는지 보자..
( 이미 검색하면 왜 그렇게 되는지 증명한 글이 많으므로, 증명은 생략한다.)

먼저 벡터의 덧셈과 뺄셈을 보도록하자.
벡터의 덧셈은 말 그대로


x = A.x + B.x
y = A.y + B.y
가 된다. 이 두 벡터는 교환 법칙이 성립하므로, A+B, B+A 는 모두 동일하다. 보통 이동을 시킬 때 이동값들을 그냥 계속 더하면, 최종적인 위치가 나온다.
즉, 아래의 그림과 같다.  결과 값은 C 벡터가 된다.

 

그리고 뺄셈은
x = A.x - B.x
y = A.y - B.y
가 된다. 이 것도 그냥 빼버리면 되지만, 뺄셈연산은 중요하다. 예를들어 A 벡터와 B 벡터가 있다. 그럼 A 에서 B로 향하는 벡터를 구하고 싶다면, 뺄셈을 이용한다. A에서 B로 향하는 벡터를 구하려면 B에서 A를 빼주면 된다. 반대로
A-B가 되면 B에서 A로 향하는 벡터가 된다.
어느 방향으로 보는지 방향 벡터를 구할 때 많이 사용한다. 아래의 그림과 같은 빨간 벡터들이 결과 값으로 나온다.
 


이제 내적을 알아보자. 벡터 A 와 B를 내적하면, 스칼라값이 나온다.

여기서 스칼라 라는 것은 크기만 있고, 방향이 없다. 벡터는 크기와 방향이 있다. 이 것이 가장 큰 차이이다. 처음에 2가지 개념이 좀 왜 그런지 헷갈릴 수도 있다. 물리로 따지면, 벡터와 스칼라를 힘이라고 봤을 때 벡터는 force, 스칼라는 power다. force는 어느 방향으로 어느정도의 크기로 밀었는지를 알 수 있는 힘, power는 그냥 단순히 힘이 쎄다. 약하다. 만 판단할 수 있는 힘이다.
그래서 스칼라 값은 그냥 하나의 수로 나오고, 벡터는 x,y,z의 값이 나온다.
그리고 벡터는 시작점이 다르더라도 크기와 방향이 같다면, 무조건 같은 벡터로 생각한다. 아래의 A,B,C는 같은 벡터이다. (달라 보일 수도 있지만, 그림판에서 복사 붙여넣기라 방향과 크기는 같다  ㅋ; )


어쨋든 두 벡터를 내적하면,

내적값 = A.x*B.x+A.y*B.y+A.z*B.z 

가 된다. 이 내적값을 acos()에 넣어주면 각도가 나온다.

cos세타 = 내적값 이기 때문이다.


위의 빨간 색으로 된 각도 세타를 구할 수 있게 되는 것이다.

그 외에도 평면의 원점에서의 거리라던지, ai에서 현재 시야에 들어왓는지 판단등등.. 여러가지 연산에 응용될 수 있는 연산이다.

벡터 A와 B를 외적하면, 벡터가 나온다.
바로 A와 B 둘 모두에 직교하는 벡터가 나온다. 머리 속으로 축을 생각하면된다. X축과 Y축을 외적하면, Z축이 나오는 것이다.
아래의 빨간 벡터가 구해진다.


외적 연산은..

외적 벡터.x = A.y * B.z - A.z * B.y
외적 벡터.y = A.x * B.z - A.z * B.x
외적 벡터.z = A.y * B.x - A.x * B.y

가 된다. 머 저 수식 자체를 물어보지는 않겠지만, 혹시 기억하기 쉬우려면, 일단 2개의 곱한 값이 - 라는 것을 기억하고..
x 의 성분에는 A와 B의 x를 제외한 yz 가 나오고 나머지도 마찬가지라는 것을 기억하면된다. 그리고 순서는 xyz 라고 생각했을 때 x 일때는 그 왼쪽에 있는 z, y일 때는 그 왼쪽에 있는 x 이런 순으로 A 벡터의 값이 먼저 나온다. 그러면 뒤의 값들은 유추해서 곱할 수 있다..


아까의 내적 연산은 교환법칙이 성립하지만, 외적은 교환법칙이 성립하지 않는다. 외적에서 A.cross(B) ( 함수로는 보통 이렇게 표현한다. ) 의 외적과 
B.cross(A) 외적은 방향이 반대가 된다. 그리고 왼손 좌표계를 쓰느냐 오른손 좌표계를 쓰느냐에 따라서도 연산에 영향을 받는다. 위의 연산은 다이렉트x,
즉 왼손 좌표계를 기준으로 적은 좌표이다. 오른손 좌표계는 - 양쪽의 항들을 바꿔주면된다.

외적 연산을 이용하는 것은, 회전 축을 생성하거나, 혹은 외적의 방향으로 벡터의 위치를 판단, 혹은 A, B 두 벡터의 외적은 A와 B 벡터가 이루는 평행사변형의 넓이가 나오는 등으로 활용할 수 있다.

마지막으로 벡터의 길이를 구하는 연산을 알아보자...

길이 = sqrt(A.x*A.x + A.y*A.y + A.z*A.z )

가 된다. 저 sqrt 함수는 루트의 의미이다. 이 연산은 피타고라스 정리에서 나온 개념이기 때문에, 제곱 제곱 제곱 더해서 루트를 씌워준다.

길이 같은 경우에도, 힘의 크기라던지, 방향만 있는 단위벡터에 곱해서 움직이는 양을 측정하는 등에 이용된다..

Posted by 바람처럼..
|