我之前已经问过这个问题,由于它不是一个编程问题而被关闭了,这完全是因为我说错了。我想将此实现为java。我正在创造一个小游戏,我有一个光子鱼雷正在从一艘船向目标射击。现在,当鱼雷的速度很慢时,如果它们正在移动并且我想解决这个问题,它将永远不会击中任何目标。我已经制定了多个理论并绘制了大量数学资料,以找出实现这一目标的最佳方法,最后我推导出以下内容:
这是一个数据库:
现在唯一的问题是我需要将a线旋转到正确的方向,因为默认情况下它与c线平行,这会扰乱整个方程。有人能帮忙吗?而且,如果你能想出一个更好的方法来找到新的位置建议是非常受欢迎的。我的java游戏实体机制的工作原理如下:
我问这个问题不要再被关闭,因为这次我真的需要将答案实现到Java中。
这是我到目前为止所尝试的数学:
double dis = level.distanceBetween(photonTargetTop, this);
double speed = 5;
double time = dis / speed;
double d1 = photonTargetTop.velocity.x * time;
double d2 = photonTargetTop.velocity.y * time;
double dis2 = level.distanceBetween(this, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);
double dis3 = level.distanceBetween(photonTargetTop, photonTargetTop.pos.x + d1, photonTargetTop.pos.y + d2);
double cosAngle = Math.pow(dis2, 2) + Math.pow(dis, 2) - Math.pow(dis3, 2) / 2 * dis2 * dis;
double angle = Math.acos(cosAngle);
EntityPhoton p = new EntityPhoton(this, level);
p.rotation = angle;
level.addEntity(p, pos);
答案 0 :(得分:1)
让我们假设目标船没有加速度,这意味着它的速度和方向没有变化。
让我们假设一旦开火,你的鱼雷没有加速。它始终保持恒定速度。
我们也可以调用(0,0)你的鱼雷发射点。
该船描述了一条直线。选择此行上的一个点(如果船舶正在跟踪未经过的路线(0,0),您可以找到距离中心位置最近的点,并且可以在维基百科上查找某些几何体。)
一旦你选择了想要击中敌舰的位置,你知道(0,0)和那个位置之间的距离,并且鉴于鱼雷的速度总是相同的,你也可以知道什么时候发射鱼雷。 然后你还必须找到方向,意思是给出x和y的速度值,但这并不是那么困难。
一般来说问题是一个具有多个解决方案的系统,所以假设鱼雷比目标快,有无限点你可以点击它,所以你必须使用一些启发式来选择一个方便你的点。