繁体   English   中英

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

[英]C++ How to calculate an arc between two 3D points

我阅读了该论坛,并且确定已经问过这个问题了,但是我找不到真正想要的东西。

我的问题如下:

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

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

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

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

不必一定是弧线。 您可以以非常简单的方式递归解决此问题。

假设您在位置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个细分足以使它足够平滑。 若要细分,请以第一个路径的中点为中心,然后在第二个路径的中点处画一条线。 从第二条路径到第三条路径的操作相同,现在矩形变成一个八边形。 如果那还不够平滑,请再执行几个步骤。 这将创建一个可以使用的新样条线。

我将研究样条曲线和EQS系统的组合。 样条曲线定义了理想的轨迹。 EQS系统查找路径附近或路径上的位置,同时仍在避开障碍物。 EQS可以返回所有有效的目的地,因此您可以通过自定义critera手动订购它们。

设置在样条线上的Actor可以工作,但是当使它们停止跟随样条线,在正确的位置创建新的,将actor附加新的样条线时,会产生一堆混乱。

昨天,我完全按照加样条点等的杂乱方式得出了这个结论。我看到的唯一问题是,我发现EQS系统很难理解。 不遵循这些示例,而是按照我需要的方式对其进行修改。 让我们看看,我给你发帖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM