【问题标题】:C++ How to calculate an arc between two 3D pointsC ++如何计算两个3D点之间的弧
【发布时间】:2017-08-08 16:56:38
【问题描述】:

我通读了论坛,我确信以前有人问过这个问题,但我真的找不到我要找的东西。

我的问题如下:

我有一个沿着样条线移动的 AI 角色。如果该路径被阻挡,角色应围绕它沿弧线移动,然后继续沿其路径前进。

为了论证,假设样条线的长度为 7000 个单位。

因此,我有两个 3D (x,y,z) 向量。第一个向量是 AI-bot 的当前位置,第二个向量是经过障碍物的位置。暂时让我们说:当前样条位置 + 400 个单位;稍后我可以做一条线追踪来获得障碍物的尺寸等,但现在我不在乎它。

现在我想计算一条替代路径以避免上述障碍 - 因此计算这两点之间的弧 - 我该怎么做? 我的数学真的很糟糕,但我看了弹道,因为我认为它会是一样的,只是无法真正理解它:

【问题讨论】:

标签: c++ 3d trigonometry unreal-engine4 unreal-blueprint


【解决方案1】:

它不一定是弧线。您可以通过一种非常简单的方式递归地解决这个问题。

假设你在位置 A,障碍物在位置 B。你可以做以下动作:

  • 从当前位置到A+V(B[x]+height(B),0,0)
  • 从当前位置到A+V(0,B[y]+width(B),0)
  • 从当前位置到A+V(B[x]-height(B),0,0)

其中 V 是包含 V(x,y,z) 分量的向量,width(B) 是障碍物的宽度,B[x] 是 B 位置的 x 分量。这样你就可以绕着它移动沿着一个矩形。您现在可以通过将该矩形分成两半来平滑路径。 3个细分足以使这个足够平滑。要细分,取第一条路径的中间点,并在第二条路径的中间画一条线。从第二条路径到第三条路径的操作相同,现在您的矩形变成了八边形。如果这还不够顺畅,请再执行几个步骤。这将创建一个您可以使用的新样条线。

【讨论】:

    【解决方案2】:

    我会研究样条曲线和 EQS 系统的组合。样条曲线定义了要遵循的理想路径。 EQS 系统会在路径附近或路径上找到位置,同时仍会进行避障。 EQS 可以返回所有有效的目的地,因此您可以按自定义标准手动订购它们。

    设置在样条线上的 Actor 确实可以工作,但是当让它们停止跟随样条、在正确的点创建新的、将 Actor 附加到新的样条等时,会出现一大堆混乱。

    【讨论】:

      【解决方案3】:

      在完全采用添加样条点等的混乱方式后,我昨天得出了这个结论。我看到的唯一问题是我发现 EQS 系统非常难以理解。不遵循这些示例,而是以我需要的方式对其进行修改。让我们看看,我会及时通知你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-10
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多