簡體   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