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를 공부하는 초보입니다.
위 부분에서 외적을 하는 이유와 제곱을 통해 검사하는 이유를 잘 모르겠습니다.
간단하게 나마 알려주신다면 감사하겠습니다.
외적과 벡터 길이의 제곱에 관한 질문드립니다.
Moderator: 류광
-
- Posts: 480
- Joined: 2006-11-04 16:24
- Location: Creaty Networks
- Contact:
외적 공식을 기하학적인 관점에서 본다면, 외적을 통해 구해진 벡터의 길이는 삼각형의 높이에 해당하는 값이 됩니다.
관련자료 : http://www.phy.syr.edu/courses/java-suite/crosspro.html
벡터의 길이를 구하는 것은 제곱수를 구하는 것은 훨씬 빠르기 때문입니다.
길이를 구하는 공식을 보아도, 제곱수를 먼저 구하고 그것에 루트 계산을 하게 되죠.
(a^2 + b^2) ^ 0.5
루트 계산은 상당히 부담이 있는 계산이고, 정확한 길이가 필요한 것이 아니라 단순 크기 비교를 하기 위함이므로, 제곱수를 구하는 것입니다.
a^2 + b^2
계산식만 봐도 빨라 질 것 같다는 생각이 드시죠?
관련자료 : 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/
----------------------------------------------
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------