C++ C++;如何计算两个三维点之间的圆弧

C++ C++;如何计算两个三维点之间的圆弧,c++,3d,trigonometry,unreal-engine4,unreal-blueprint,C++,3d,Trigonometry,Unreal Engine4,Unreal Blueprint,我通读了论坛,我确信这个问题以前被问过,但我真的找不到我想要的 我的问题如下: 我有一个AI角色沿着样条线移动。如果该路径被阻止,角色应围绕该路径以弧形移动,然后继续沿着其路径移动 为方便起见,让我们假设样条线的长度为7000个单位 因此,我有两个3D(x,y,z)向量。第一个向量是AI机器人的当前位置,第二个向量是通过障碍物的位置。暂时让我们只说:当前样条线位置+400个单位;后来,我可以做一个线跟踪,以获得障碍物的尺寸等,但现在我不关心它 现在,我想计算一个替代路径,以避免前面提到的障碍-因

我通读了论坛,我确信这个问题以前被问过,但我真的找不到我想要的

我的问题如下:

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

为方便起见,让我们假设样条线的长度为7000个单位

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

现在,我想计算一个替代路径,以避免前面提到的障碍-因此计算这两点之间的弧-我如何做到这一点?
我的数学非常糟糕,但我看了一下弹丸的轨迹,因为我认为它会有点像,只是无法真正理解它:

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

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

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

其中V是一个向量,分量为V(x,y,z),width(B)是障碍物的宽度,B[x]是B位置的x分量。通过这种方式,可以沿着矩形绕着障碍物移动。现在可以通过将该矩形细分为两半来平滑路径。3个细分足以使其足够平滑。若要细分,请在第一条路径的中间点绘制一条线,然后在第二条路径的中间绘制一条线。与从第二条路径到第三条路径所做的相同,现在矩形变成八角形。如果这还不够顺利,再多做几步。这将创建一个可以使用的新样条线。

我将介绍样条线和EQS系统的组合。样条曲线定义了要遵循的理想路径。EQS系统会在路径附近或路径上查找位置,同时仍在进行障碍物规避。EQ可以返回所有有效的目的地,因此您可以根据自定义标准手动订购


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

昨天,我通过添加样条曲线点等复杂方法得出了这个结论。我看到的唯一问题是,我发现EQS系统很难理解。不遵循示例本身,而是以我需要的方式对其进行修改。让我看看,我保持你的帖子。

因为这个问题与编程没有直接关系,你可以考虑在这里问这个问题。