외적 구하기
(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
-----------------------------------------------------------------------------------------------------
-- 평행사변형의 넓이의 제곱 --------------------------------------------------------------------------
-- sinθ != 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 = laVllbVlcosθ
부피 = 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 |