Java - 两条线的碰撞检测

时间:2012-11-27 16:46:43

标签: java collision-detection collision graphics2d

我有一个游戏,其中敌人由具有大g2d.setStroke()的线组成;我怎么能找到这条线和另一条线之间的碰撞? 这是我画的地方:

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

1 个答案:

答案 0 :(得分: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).

任何交叉点都必须在这两个线条上,因此:

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表面是否转向您:法线向量。