0

我有一个游戏,其中敌人由带有大 g2d.setStroke(); 的线条组成;我如何找到这条线和另一条线之间的冲突?这是我画它的地方:

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

1 回答 1

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

于 2012-11-27T17:08:36.657 回答