벡터 외적 연산의 핵심은 연산한 결과가 연산한 두 벡터에 수직인 벡터로 표현된다는 점이였습니다.
외적 연산의 수학적 표기방법은 X 를 사용합니다.
(내적은 dot를 사용해서 dotproduct , 외적은 X 를 사용해서 crossProduct라고 불립니다.)



위 SWF 에서 볼수 있듯이

 녹색 선은 L2 벡터.
빨간색 선은 L1 벡터.
파란색 선은 L3 벡터. 로 표현하고 있고,

 L2 X L1 = L3 의 결과를 나타내고 있습니다.

 화살표키로 로테이션 시킬때마다 L2 X L1 의 연산결과를 나타내고 있습니다.

 

내장 Vector3D API 를 사용한 연산은 아래와 같습니다.

var l1 : Vector3D = new Vector3D(100,0,0);
var l2 : Vector3D = new Vector3D(0,100,0) ;
var l3 : Vector3D = l1.crossProduct(l2) ;

 

위 코드에서 벡터 l1은  방향은 x축방향이고 크기는 100 인 벡터입니다.
l2 는 방향은 y축 방향, 크기는 100인 벡터입니다.

 두 벡터의 외적 연산 결과는 l3로 벡터이며, 크기는 |l1|*|l2|*sin@ (여기서 @는 l1과 l2의 사이각) 이고 방향은 양의 Z축과 평행한 방향입니다.(l1과 l2의 수직한 방향).

 만약 여기서 외적 순서를 바꿔서 l2.crossProduct(l1) 을 하게 되면 l3는 크기는 위와 같고 방향은 음의 z축방향을 향하게 됩니다.

 여기서 볼수 있듯이 외적계산은 교환법칙이 성립하지 않으며, 이러한 성질을 이용해서 3D 엔진에서 평면을 렌더링할때,평면이 앞을 바라보고 있는지 뒤를 바라보고 있는지 알수 있습니다.

 예를들어, l3와 시선벡터 Vector(0,0,-1)를 내적을 하게 된 결과가 양수이면 앞면을 바라보고 있는것이고, 음수이면 뒤를 바라보고 있는것입니다.

 

위 예제 sWF에서 l3와 Vector(0,0,-1)을 내적해서 양수(앞면)이면 노란색으로 평면을 칠하고, 음수(뒷면)이면 회색을 칠하도록해보았습니다.

저작자 표시 비영리 변경 금지
Posted by 웹눈