【问题标题】:Predicting an object's position after a certain amount of time在一定时间后预测物体的位置
【发布时间】:2019-11-19 16:57:04
【问题描述】:

我目前正在尝试想出一种方法来高精度地“解决”玩家的位置。

该位置将是导弹将被发送到的点。导弹将具有速度/延迟/宽度和射程。玩家也有速度,并且很可能会尝试走出导弹,这就是我试图“预测”的。我可以过滤所有无法将导弹发送到的位置(因为玩家无法移动到那里,或者会被另一个物体阻止移动到那里),但我仍然面临玩家试图移动的问题走出导弹。

一个简单的

const float missile_speed = 2000;
const float missile_width = 100;
const float missile_delay = 0.250f;

const float target_speed = 350;

float time_to_land = (player->position.distance_to(sender->position) / missile_speed) + missile_delay;

D3DXVECTOR3 position = player->position + player->direction *  time_to_land);

不会这样做,因为玩家可以在导弹发射的那一刻改变他的方向,从而有效地使其错过。这就是我可以使用玩家的路径并将其拆分,然后对其进行分析以找到我可以施放的最佳位置的地方,但如果玩家突然改变方向,这个问题仍然存在。导弹有时肯定会命中,但远非持续命中。

我不知道如何处理。我已经搜索了很长一段时间,大多数“解决方案”都是我在示例中的解决方案。

我应该如何正确处理这个问题?我正在考虑使用神经网络,但我不知道从哪里开始,也找不到任何资源可以使用 AI 带来我的问题细节。请记住,我是在 C++ 中执行此操作的。

【问题讨论】:

  • 除非你想“作弊”,否则你真的无能为力。如果有飞行时间,用户可以让开。您必须对用户进行导弹跟踪才能与之抗衡。
  • 我重新标记了这个问题,因为futureprediction 都引用了与您的问题无关的特定概念。请注意您使用的标签的标签说明。
  • 如果你首先要决定在哪里开火,然后玩家可以决定是否改变路线,基本的博弈论告诉你,你不可能赢。您可以选择一个玩家在粗心时最有可能出现的位置,或者他们最有可能试图躲避的位置,但应该清楚的是,您不能保证在对抗可以做出选择的对手时取得成功。
  • @NathanOliver- 恢复 Monica 部分正确,用户可以让开,最终它仍然是人,他们会犯错误。我并不是想最终达到 100% 的命中率,我会满足于 ~80%。
  • @ctx 为此,您需要跟踪。跟踪不一定是 100% 完美的。你可以让改变方向的逻辑只运行一定百分比的时间,这样它就可以缓慢地跟踪用户。这使得它更难避免,但仍然使它成为可能。迟缓的程度决定了难易程度。

标签: c++ physics-engine extrapolation


【解决方案1】:

我看不到导弹发射后的限制。 如果这个导弹可以在飞行过程中被引导/重新定向,那么一些解决方案比如在每 1/10 的 time_to_land 之后触发重新计算玩家的位置就可以了。您可以通过更频繁地触发来提高精度。 另一方面,如果需要在发射前确定玩家的位置,那就另当别论了。

【讨论】:

  • 确实要在发射前确定位置,不能制导/重定向导弹。如果更频繁地触发它确实可以大大提高精度,但它通常有一个停机时间(例如 6 秒)。
  • 正如其他人已经建议的那样,您需要为此配备导弹跟踪器。您可以尝试的一件事是跟踪玩家在试图躲避导弹时跑向的方向。随着您拥有更多数据,您可能会有更好的预测机会。
猜你喜欢
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2020-05-03
  • 2013-01-29
相关资源
最近更新 更多