我有一个游戏,其中敌人由带有大 g2d.setStroke(); 的线条组成;我如何找到这条线和另一条线之间的冲突?这是我画它的地方:
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
我有一个游戏,其中敌人由带有大 g2d.setStroke(); 的线条组成;我如何找到这条线和另一条线之间的冲突?这是我画它的地方:
g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
//thickness = 35 --- declared previously
g2d.drawLine(x1, y1, x2, y2);
由于数学似乎不是您最喜欢的主题,所以让我们保持简单并使用学校数学。
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 表面是否朝向您:法线向量。