我之前问过这个问题,由于它不是编程问题而被关闭,这完全是因为我的措辞错误。我希望将其实现到 java 中。我正在创建一个小游戏,我有一个光子鱼雷,它从一艘船上向目标发射。现在,由于鱼雷的速度很慢,如果它们正在移动,船将永远不会击中任何目标,我想解决这个问题。我已经制定了多种理论并绘制了许多数学资料,以找出实现这一目标的最佳方法,最后我得出以下结论:
- 我找到了光子鱼雷到达目标所需的时间。
- 我发现目标在鱼雷到达的时间内走了多远。
- 然后我找到目标的新位置和原船之间的距离。
- 这让我有机会使用余弦规则 (SSS) 来找出子弹需要发射的轨迹才能有更高的击中机会。
这是一个图表:
现在唯一的问题是我需要将线 a 旋转到正确的方向,因为默认情况下它平行于线 c,这会弄乱整个方程。有人能帮忙吗?如果您能想出更好的方法来找到新的职位建议,我们也非常欢迎。我的 java 游戏实体机制的工作原理如下:
- 每个实体都有两个控制运动的向量。位置和速度。然而,速度并没有被完全正确地跟踪,因为它不是一个速度和一个方向,为了让事情变得更容易,它是一个 xSpeed 和一个 ySpeed。
- 实体每刻都会更新一次,发射鱼雷的船必须在这一刻而不是在多个刻中计算未来的位置。
我问这个问题不要再被关闭了,因为这一次我真的需要将答案实现到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);