COPY NAV導航網格尋路 光照射線法

2021-06-27 23:08:12 字數 1536 閱讀 3666

上圖是乙個由任意凸多邊形構成的導航網格,白線包圍區域代表著不可進入的障礙區域,紅線包圍區域則可以進入或穿越。網格中所有多邊形的頂點儲存次序均為順時鐘序。在下面的討論中,我們的運算一概採用左手系進行。

假設當前所處的位置為p0,視線方向向量為n0,p0位於多邊形a中,我們知道每一條邊的兩側的多邊形的編號,現在的問題是:如果求得該視線途經了哪些多邊形?與這些多邊形的哪些邊相交於何處(即way point)?該視線終結於哪條邊的何處?

首先讓我們來解決乙個子問題,即判斷射線r與某凸多邊形p之間的關係。不難想象,r只可能與p不相交、相交於1點或2點(只有穿出、或先射入後穿出)。這裡我們最關心的是:(1) r究竟與p相交否?(2) 如果相交,那麼r穿出p時,其交點在哪條邊上?在**?

以a和射線r=(p0,n0)為例,先來判斷a與r是否相交,這個太容易了,只需判斷a有沒有邊與r相交即可。遍歷a的每一條邊e,然後得到每一條邊的起點和終點(注意,時刻牢記頂點順序是順時鐘的)。然後,分別獲得起點向量from和終點向量to,然後計算test_a=from×n0和test_b=to×n0,再來檢查test_a和test_b的z分量符號:如果相同,則from、to均位於n0的同一側,e與r不相交;如果test_a.z>0且test_b.z<0,則e為射線r在a中的穿出線;如果test_a.z<0且test_b.z>0,則要麼e是射線的反方向與a的交線,要麼e為射線在a中的射入邊。這裡,我們最關心的是有沒有test_a.z>0且test_b.z<0的情況,即有沒有穿出邊。

如圖,如果要對r進行los test,首先我們要判斷一下p0處於哪個多邊形,這個點與多邊形關係的判斷也很容易,這裡,我們的p0位於a中。然後,在a中找射線r的穿出邊和穿出點(求兩射線的交點,trivial),判斷穿出邊的另一側的多邊形是否可以進入?如果是障礙或網格邊緣,則los test中止,如果不是,則獲得穿出邊另一側的多邊形編號,這裡是b,然後繼續在b中找射線r的穿出邊和穿出點,繼續前面的一系列步驟,直到找出r的所有途經多邊形、所有穿出邊和穿出點為止。以上便是一次完整的視線檢測過程。是不是足夠簡單?heh

如何判斷點p0是否處於凸多邊形內?

見上圖,這裡我們採用叉乘法,雖說只適用於凸多邊形,不過計算最簡便,不涉及三角運算(內角和法)和開方(面積法),什麼水平垂直交叉線檢測就直接免了吧,too ugly。假設多邊形是順時鐘頂點序,我們採用的是左手系。遍歷每條邊,作乙個邊向量e,從起點到終點;然後作測試向量t,從邊起點到要測試的點p0;計算test=e×t,如果test向量的z分量符號始終保持不變,則p0處於多邊形內部;一旦其符號發生了改變(只需檢測到一次符號改變即可),則p0處於多邊形外部。

導航網格和los檢測用來幹什麼的?

導航網格一般用來做層級式a*尋徑,它可以很容易地推廣到3d路徑規劃,與某些附加特性相配合,能夠實現更多的特殊用途;los檢測主要有兩個用途:動態區域性point of view尋徑和a*路徑優化(平滑+cutting the corner)。

IntelliJ IDEA 導航 結構導航

1.最近的操作導航 大多數情況下,我們只需要使用最近的檔案或者開啟最近使用過的工具視窗,並在此之間頻繁切換,你可以通過ctrl e快捷鍵來建立快速訪問最近檔案和工具視窗的視窗並且快速導航到該視窗。此操作缺省會選擇你上乙個處理過的視窗。你可以通過此操作開啟任意視窗。2.快速類導航 通過快捷鍵ctrl ...

聯通手機導航對陣車載導航

聯通手機導航對陣車載導航 擬明年全國商用 開挖車載導航牆腳 明年實現全國商用 本報訊 記者劉奇 十一前率先在北京試執行手機導航業務後,聯通正試圖把這一業務推向全國。昨天,記者從聯通集團了解到,從試執行至今,聯通已經在包括北京在內的國內51個大中型城市開通cdma手機的導航業務,並計畫在年底之前把商用...

捷聯慣性導航 導航基礎

什麼是慣性導航?我的理解是在慣性空間下進行導航。什麼是慣性空間?慣性空間是該空間中存在乙個固定不動的點,既不運動,也不旋轉。可想而知,慣性空間是我們假想的,任何東西都不可能絕對靜止。但是在工程上誤差允許的範圍內,我們可以認為某點不動,而我們目前慣性導航都是基於地球是靜止的基礎上進行導航的。因此我們首...