我有一个游戏,其中敌人由具有大g2d.setStroke()的线组成;我怎么能找到这条线和另一条线之间的碰撞? 这是我画的地方:
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
答案 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表面是否转向您:法线向量。