2012-11-27 71 views
0

我有一个游戏),其中的敌人是由一个大g2d.setStroke行(;我如何找到这条线和另一条线之间的碰撞? 这里是我画出来:爪哇 - 碰撞检测的两条线

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); 

在所述两个线片A点是:

(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). 

任何交点必须是关于这两个线件,因此:

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}中的alpha和beta解决方案,你已经掌握了它。

如果任何辅助因子 - 样(x2 - x1) - 是0,你有一个简单的解决方案。 否则,你可以把/乘的辅因子。

或者你可以投资一点时间学习线性代数基础知识,矩阵和决定因素和这样。有了这些知识,人们还可以确定3D表面是否转向您,或者不是:法线矢量。