외적 구하기

(X = cross) :  외적

aV = [1,2,3]
bV = [4,8,16]
i = [1,0,0]
j = [0,1,0]
k = [0,0,1]
i X j = k, j X k = i, k X i = j
i X k = -j, j X i = -k, k X j = -i
i X i = [0,0,0]
j X j = [0,0,0]
k X k = [0,0,0]

cV(외적) = aV X bV = {(aV.x*i)+(aV.y*j)+(aV.z*k)} X {(bV.x*i)+(bV.y*j)+(bV.z*k)}

(aV.x*i) X (bV.x*i) = 0
(aV.x*i) X (bV.y*j) = (aV.x*bV.y)*(i X j) = aV.x*bV.y*k
(aV.x*i) X (bV.z*k) = (aV.x*bV.z)*(i X k) = aV.x*bV.z*(-j)
(aV.y*j) X (bV.x*i) = (aV.y*bV.x)*(j X i) = aV.y*bV.x*(-k)
(aV.y*j) X (bV.y*j) = 0
(aV.y*j) X (bV.z*k) = (aV.y*bV.z)*(j X k) = aV.y*bV.z*(i)
(aV.z*k) X (bV.x*i) = (aV.z*bV.x)*(k X i) = aV.z*bV.x*(j)
(aV.z*k) X (bV.y*j) = (aV.z*bV.y)*(k X j) = aV.z*bV.y*(-i)
(aV.z*k) X (bV.z*k) = 0

cV = 0 + (aV.x*bV.y*k) + (aV.x*bV.z*(-j)) + (aV.y*bV.x*(-k)) + 0 + (aV.y*bV.z*(i)) + (aV.z*bV.x*(j)) + ((aV.z*bV.y*(-i)) + 0
cV = (aV.y*bV.z-aV.z*bV.y)*i + (aV.z*bV.x-aV.x*bV.z)*j + (aV.x*bV.y-aV.y*bV.x)*k
cV = (aV.y*bV.z-aV.z*bV.y)*
i + (aV.z*bV.x-aV.x*bV.z)*j + (aV.x*bV.y-aV.y*bV.x)*k


외적의 길이 구하기

|aV| = aV Vector의 길이

lallblsinθ = 평행사변형의 넓이 = cV(외적)의 크기

증명하자

sinθ = x(높이)/lbVl
x = lbVl*sinθ
넓이 = laVl*x = laVl*lbVl*sinθ

먼저, 벡터 크기의 제곱은 벡터 자기 자신과 내적한 것과 같다. 이를 알아 보자.
dot aV aV = laVl*laVl*cos0 = laVl^2

이제, 외적의 크기를 평행사변형의 넓이와 같음을 직접 증명하기 힘든 관계로 외적의 제곱을 이용하여 증명하여보자.

-- cV의 길이 제곱 ------------------------------------------------------------------------------------
lcVl^2 = dot cV cV = dot {(aV.y*bV.z-aV.z*bV.y)*i + (aV.z*bV.x-aV.x*bV.z)*j + (aV.x*bV.y-aV.y*bV.x)*k}
                                 
{(aV.y*bV.z-aV.z*bV.y)*i + (aV.z*bV.x-aV.x*bV.z)*j + (aV.x*bV.y-aV.y*bV.x)*k}
                         
 = (aV.y*bV.z-aV.z*bV.y)^2 + (aV.z*bV.x-aV.x*bV.z)^2 + (aV.x*bV.y-aV.y*bV.x)^2
                            -- (a - b)^2 = a^2 - 2ab + b^2
                          = aV.y^2*bV.z^2 - 2aV.y*bV.z*aV.z*bV.y +  aV.z^2*bV.y^2
                          + aV.z^2*bV.x^2 - 2aV.z*bV.x*aV.x*bV.z +  aV.x^2*bV.z^2
                          + aV.x^2*bV.y^2 - 2aV.x*bV.y*aV.y*bV.x +  aV.y^2*bV.x^2
-----------------------------------------------------------------------------------------------------
-- 평행사변형의 넓이의 제곱 --------------------------------------------------------------------------
-- si != 1 - cosθ
-- (sinθ)^2 = 1 - (cosθ)^2
(laVllbVlsinθ)^2 = laVl^2*lbVl^2*(sinθ)^2
                        = laV|^2* lbVl^2  *(
1-(cosθ)^2)
                        = laV|^2* lbVl^2 - laV|^2* lbVl^2*(cosθ)^2
                        = laV|^2* lbVl^2 - (laV|lbVlcosθ)^2
                        = laV|^2* lbVl^2 - (dot aV bV)^2
                        = (aV.x^2 + aV.y^2 + aV.z^2)*(bV.x^2 + bV.y^2 + bV.z^2)
                           - (aV.x*bV.x + aV.y*bV.y + aV.z*bV.z)^2

                        = (aV.x^2*bV.x^2 + aV.x^2*bV.y^2 + aV.x^2*bV.z^2 + aV.y^2*bV.x^2 + aV.y^2*bV.y^2 + aV.y^2*bV.z^2 + aV.z^2*bV.x^2 + aV.z^2*bV.y^2 + aV.z^2*bV.z^2) 
                           - (aV.x^2*bV.x^2 + aV.y^2*bV.y^2 + aV.z^2*bV.z^2 + 2*(aV.x*bV.x*aV.y*bV.y + aV.x*bV.x*aV.z*bV.z + aV.y*bV.y*aV.z*bV.z)

                        = aV.y^2*bV.z^2 - 2aV.y*bV.z*aV.z*bV.y +  aV.z^2*bV.y^2
                           + aV.z^2*bV.x^2 - 2aV.z*bV.x*aV.x*bV.z +  aV.x^2*bV.z^2
                           + aV.x^2*bV.y^2 - 2aV.x*bV.y*aV.y*bV.x +  aV.y^2*bV.x^2
-----------------------------------------------------------------------------------------------------
같음이 증명 되었다.

그래서
외적의 크기 = 평행사변형의 넓이 = lallblsinθ


평행육면체의 부피 구하기

h = lcVlcosα
dot aV bV = laVllbVlco

부피 = base(평행사변형) * height(높이) = (laV X bVl)*lcVl*cosα
                                            =
dot (aV X bV) cV






'Max' 카테고리의 다른 글

Transform 회전  (0) 2012.03.08
Local Transform 과 World Transform 구하기  (0) 2012.02.22
Script Controller - Transform으로 LookAt 만들기  (0) 2012.02.09
쿼터니언(Quaternion) 정리  (0) 2012.02.07
normalize , 내적 공식  (1) 2012.01.09
Posted by Hwanggoon
,