Essential Mathematics for Computational Design 09 벡터의 외적

벡터의 외적(Vector cross product)
3d 좌표상에 있는 두 벡터를 외적하면 그 두 벡터에 직각으로 만나게 되는 제3의 벡터가 나타나게 됩니다.

a = <a1, a2, a3>
b = <b1, b2, b3>

외적 a x b 는 행렬(determinant)을 사용하여 정의할 수 있습니다. 아래 그림은 이러한 행렬을 어떻게 계산하는 지를 설명하고 있습니다. 이를 위하여 벡터 i=<1,0,0>, j=<0,1,0> and k=<0,0,1>를 이용해보겠습니다.

 

a x b = i(a2*b3) + j(a3*b1) + k(a1*b2)- k(a2*b1) – i(a3*b2) – j(a1*b3)

a x b = <a2*- a3*b2, a3*b1 – a1*b3, a1*b2 – a2*b1 >
 
아래그림 15와 16은 Grasshopper내의 함수 컴퍼넌트를 이용하여 위의 계산식을 표현한 뒤 이것을‘Cross Product’ 컴퍼넌트와 비교를 해놓은 것입니다.
 

그림 15 두 벡터의 외적 계산


그림 16 GH 상의 'Cross Product Component'를 이용한 두 벡터의 외적 계산

벡터a X b는 벡터a 와 벡터b에 직각으로 만난다.

정리
3d 좌표상에 존재하는 어떠한 벡터라도
|a x b| = |a||b|sin(θ), 가 성립합니다.
이때 “θ”는 위치벡터 ab 사이에 존재하는 각입니다.
만약 a와 b가 단위 벡터라면, 이 둘을 외적한 벡터의 길이는 이 두 벡터 사이각의 Sin값과 같습니다.
이는 다음과 같이 표현할 수 있습니다.
|a x b| = sin(θ)

다음은 Grasshopper를 이용하여 두 벡터의 외적을 구한 것 입니다. 하나는 위의 공식을 적용하여 구한 것이고 다른 하나는 GH에 있는 ‘Cross Product’ 컴퍼넌트를 이용하여 계산한 것입니다. 위에서 말한 것처럼 이 둘은 같은 결과값을 나타내게 됩니다.

그림 17 함수를 이용한 외적의 계산과 ‘Cross Product’를 이용한 벡터의 외적 구하기

외적을 구할 때 피연산자의 순서가 무척 중요합니다. 예를 들어 다음 a와 b를 순서를 달리하여 외적하는 경우 그 결과값은 다음과 같이 다릅니다.
a = <1, 0, 0>
b = <0, 1, 0>
a x b = <0, 0, 1>
b x a = <0, 0, -1>

Rhino는 오른손 법칙을 사용하기 때문에 a X b의 방향 또한 오른손 법칙을 따릅니다.
(a는 검지, b는 중지, 그 둘의 외적 결과는 ‘엄지’입니다.)

벡터 ab가 평행하다면 a x b 는 0입니다.

————
수정에 대한 제안이 있으시면 댓글을 남겨주시기 바랍니다.

2 thoughts on “Essential Mathematics for Computational Design 09 벡터의 외적

  1. Pingback: Generative Algorithm 017 « Geometricmind

  2. Pingback: Generative Algorithm 037 « Geometricmind

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s