외적과 벡터 길이의 제곱에 관한 질문드립니다.

수학, 물리학 등 게임 프로그래밍의 기반이 되는 이론에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

외적과 벡터 길이의 제곱에 관한 질문드립니다.

Post by 비회원 »

http://3dapi.com/ef04_math/ 이곳에서 공부하고 있는 점과 선의 충돌에 관한 부분입니다.

INT CollisionPointToLine(const D3DXVECTOR3* V ///< 점의 위치

, const D3DXVECTOR3* P1 ///< 선분의 시작점

, const D3DXVECTOR3* P2 ///< 선분의 끝 점

, FLOAT fEpsilon=0.0001f ///< 오차율
)

{

INT hr=-1;



FLOAT fHsq;

D3DXVECTOR3 vcT1 = *V - *P1;

D3DXVECTOR3 vcT2 = *V - *P2;

D3DXVECTOR3 vcL = *P2 - *P1;



D3DXVECTOR3 vcH;

D3DXVec3Cross(&vcH, &vcT1, &vcL); // 두 벡터로 외적
fHsq = D3DXVec3LengthSq(&vcH); // 구해낸 벡터의 길이의 2승을 합니다.

if( fHsq > fEpsilon)

return hr;


FLOAT fDot = D3DXVec3Dot(&vcT1, &vcT2);


if( fDot<=0.f)

hr =0;

return hr;

}


3d를 공부하는 초보입니다.

위 부분에서 외적을 하는 이유와 제곱을 통해 검사하는 이유를 잘 모르겠습니다.

간단하게 나마 알려주신다면 감사하겠습니다.
Zeprod
Posts: 480
Joined: 2006-11-04 16:24
Location: Creaty Networks
Contact:

Post by Zeprod »

외적 공식을 기하학적인 관점에서 본다면, 외적을 통해 구해진 벡터의 길이는 삼각형의 높이에 해당하는 값이 됩니다.

관련자료 : http://www.phy.syr.edu/courses/java-suite/crosspro.html





벡터의 길이를 구하는 것은 제곱수를 구하는 것은 훨씬 빠르기 때문입니다.

길이를 구하는 공식을 보아도, 제곱수를 먼저 구하고 그것에 루트 계산을 하게 되죠.

(a^2 + b^2) ^ 0.5

루트 계산은 상당히 부담이 있는 계산이고, 정확한 길이가 필요한 것이 아니라 단순 크기 비교를 하기 위함이므로, 제곱수를 구하는 것입니다.

a^2 + b^2

계산식만 봐도 빨라 질 것 같다는 생각이 드시죠?
세상이 기다리는 나만의 SHOW!
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------
비회원

감사합니다.

Post by 비회원 »

감사합니다.
Locked