2012-11-27 3 views
0

나는 적을 큰 g2d.setStroke(); 행으로 만든 게임을 가지고 있습니다. 이 회선과 다른 회선 간의 충돌을 어떻게 알 수 있습니까? 여기 내가 그것을 그릴 수있는 곳입니다 : 좋아하는 주제 것 같다, 그래서 간단하고 사용 학교 수학을 유지하지 않는 수학으로Java - 두 줄의 충돌 감지

g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 
//thickness = 35 --- declared previously 
g2d.drawLine(x1, y1, x2, y2); 

답변

2

.

g2d.drawLine(x1, y1, x2, y2); 
g2d.drawLine(u1, v1, u2, v2); 

상기 두 개의 라인 편에 포인트가 될 것이다 :

(x, y) = (x1, y1) + alpha * (x2 - x1, y2 - y1) where alpha in (0 .. 1). 
(x, y) = (u1, v1) + beta * (u2 - u1, v2 - v1) where beta in (0 .. 1). 

상관 교점이 때문에, 이들 2 개의 라인 편에 있어야한다 :

x1 + alpha * (x2 - x1) = u1 + beta * (u2 - u1); 
y1 + alpha * (y2 - y1) = v1 + beta * (v2 - v1); 

를 동일 함 로 :

alpha * (x2 - x1) = (u1 - x1) + beta * (u2 - u1); 
alpha * (y2 - y1) = (v1 - y1) + beta * (v2 - v1); 

하는 경우가 {0, ..., 1} 내의 알파와 베타를위한 해답입니다.

보조자가 (x2 - x1)과 같이 0이면 간단한 해결책이됩니다. 그렇지 않으면 보조 요인으로 나누거나 곱할 수 있습니다.

또는 선형 대수학 기초, 행렬 및 행렬식 등을 배우는 데 약간의 시간을 투자 할 수 있습니다. 그 지식으로 3D 표면이 당신쪽으로 향하게되었는지 아닌지를 결정할 수도 있습니다 : 법선 벡터.