C ++如何计算两个3D点之间的弧

时间:2017-03-17 08:12:54

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

我通过论坛阅读,因为我确信之前已经问过这个问题,但我找不到我想要的东西。

我的问题如下:

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

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

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

现在我想计算一条避免上述障碍的替代路径 - 因此计算这两点之间的弧线 - 我该怎么做? 我在数学上非常糟糕,但看着弹丸轨迹,因为我认为它会有点相同,只是无法真正理解它:<

3 个答案:

答案 0 :(得分:0)

它不一定是弧形。你可以用一种非常简单的方式递归地解决这个问题。

考虑你位于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)的向量,宽度(B)是障碍物的宽度,B [x]是B的位置的x分量。这样你就可以在它周围移动沿着一个矩形。现在,您可以通过将该矩形细分为两半来平滑路径。 3个细分足以使这个足够顺畅。要细分,请将中间点作为第一条路径,然后在第二条路径的中间绘制一条线。从第二条路径到第三条路径也一样,现在你的矩形变为八边形。如果这不够顺利,请再做几步。这将创建一个可以使用的新样条线。

答案 1 :(得分:0)

我会看一下样条曲线和EQS系统的组合。样条曲线定义了理想的路径。 EQS系统在路径附近或路径上找到位置,同时仍然避开障碍物。 EQS可以返回所有有效目的地,因此您可以通过自定义标准手动订购它们。

在样条曲线上设置的参与者可以正常工作,但是当使它们停留在样条曲线后,在正确的点创建一个新曲线,将actor添加到新样条曲线等等时,会有一大堆混乱。

答案 2 :(得分:0)

我在完全采用添加样条点等杂乱的方式后得出了这个结论。我看到的唯一问题是我发现EQS系统很难理解。不遵循这样的例子,而是以我需要的方式修改它。让我们看看,我告诉你。