gpt4 book ai didi

Java - 两条线的碰撞检测

转载 作者:行者123 更新时间:2023-12-02 07:25:52 25 4
gpt4 key购买 nike

我有一个游戏,敌人是由带有大 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 表面是否朝向您:法 vector 。

关于Java - 两条线的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com