양 끝점을 충돌에 포함하지 않는 직선의 교차 판정식: (AC X AB) ·(AB X AD) > 0 && (CA X CD) ·(CD X CB) > 0
예외 상황: A B C D 네점이 같은 직선위에 있는 경우 판별식 AB X CD =0 && AC X CD = 0
이 경우 CA ·DA <0 || CB ·DB <0 || AC ·BC <0 || AD ·BD <0 이면 교차 판정
첨부된 파일의 Main.cpp 보면 int CollisionLineToLine(const D3DXVECTOR2* v1, const D3DXVECTOR2* v2) 함수가 있습니다. 이 함수가 교차 판정해주는 함수네요.
72라인에 테스트용 위치가 있는데 [0]: 직선의 시작위치 [2]: 직선의 방향 벡터, [1]: 두 번째 좌표 입니다.
// Line 1
m_pLine1[0] = D3DXVECTOR2(50, 90);
m_pLine1[2] = D3DXVECTOR2(1,1.3F) * 150;
m_pLine1[1] = m_pLine1[0] + m_pLine1[2];
// Line 2
m_pLine2[0] = m_pLine1[1] - m_pLine1[2]*0.1F;
m_pLine2[2] = D3DXVECTOR2(1, -1.1F) * 200;
m_pLine2[1] = m_pLine2[0] + m_pLine2[2];
LEFT, RIGHT, UP, DOWN을 하면 직선이 움직이고 충돌하면 윈도우 타이틀에 충돌 메시지가 출력 되네요.
빌드는 vc2008 , directSDK 2010 9.0C
zip안에 exe 파일이 있네요.