combinatorial methods(組合邏輯方法)必須構造乙個有限的資料結構來精確地編碼規劃問題。單元分解演算法實現了將cfr
eec_cf
ree
劃分為一組稱為cell單元的有限區域。單元分解應滿足三個特性:
vertical cell decomposition(垂直單元分解法)將cfr
eec_cf
ree
劃分為乙個2維單元和1個一維單元的有限集合。每個2維單元要麼是有垂直邊的梯形,要麼是三角形(退化的梯形)
pp表示用於定義cob
sc_cobs
的頂點集。對於每個p∈p
p\in
p∈p,嘗試通過cfr
eec_cf
ree
向上和向下擴充套件光線,直到達到cob
sc_cobs
。如圖所示,分解有四種可能的情況,這取決於是否可以在上下兩個方向中的每乙個方向上延伸。
對於垂直分解,如果不考慮所有資料點在某個隨機方向上都受到微量擾動,這些問題並不太難處理;但是,一般來說,必須意識到這一困難在大多數情況下是不容易解決的。
下圖顯示了演算法是如何進行的。最初,l
ll為空且使用雙連線的邊列表來表示cfr
eec_cf
ree
。對於每個事件,都會發生上圖中的四種情況之一。通過使用平衡二叉樹更新l
ll,可以在o(lg
n)o(\lg n)
o(lgn
)內確定p
pp上下的邊。這比檢查每個段產生的o(n
)o(n)
o(n)
要好得多。根據四種情況,對l
ll進行不同的更新。如果出現第一種情況,則插入兩條不同的邊。
g。事實上,只要正確構建g
g,並為每個單元獲取取樣點,就可以不去維護雙連線邊列表所需的所有指標。我們甚至可以更進一步,忘記單元分解,直接在相鄰單元的所有取樣點之間建立線段路徑的拓撲圖。
查詢單元的路徑規劃可以通過簡單的「連線點」形成。q
0q_0
q0,q
1q_1
q1,q
2q_2
q2,…
\ldots
…,qk−1
q_qk
−1,q
kq_k
qk表示圖g
g中路徑上的取樣點。每個單元格都有乙個被穿過的取樣點。規劃路徑τ:[
0,1]
→cfr
ee\tau:[0,1]c_
τ:[0,1
]→cf
ree
是通過設定τ(0
)=qi
\tau(0)=}
τ(0)=q
i,τ (1
)=qg
\tau(1)=}
τ(1)=q
g,並通過沿著最短路徑訪問序列中從q
0q_0
q0到q
kq_k
qk 的每個點而形成的。
在選擇取樣點時,重要的是確保從乙個單元的取樣點到其相鄰單元的取樣點的每個路徑段都是無衝突的。
最大間隙路線盡量保持遠離cob
s_cobs
,如圖中的走廊所示。由於移動機械人的精確位置很難測量和控制,因此在移動機械人應用中,更傾向於採用求解出的規劃路徑。沿著最大間隙路線(或稱廣義voronoi圖收縮方法)可以減少由於這些不確定性引起的碰撞機會。它是voronoi圖從點到多邊形的情況的推廣。路徑圖邊緣上的每個點與cob
s_cobs
邊界上的兩個點等距。每個路線圖頂點對應於兩個或多個路線圖邊的交點,因此與cob
s_cobs
邊界上的三個或多個點等距。
ss是拓撲空間x
xx的變形收縮,如果連續同倫(即:兩個物件間的「連續變化」,兩個拓撲空間如果可以通過一系列連續的形變從乙個變到另乙個),h:x
×[0,
1]→x
h:x\times[0,1]\rightarrow x
h:x×[0
,1]→
x可以定義如下:
直覺是cfr
ee_cf
ree
通過同倫逐漸變薄,直到s
ss被包含的過程。這種收縮過程可以近似想象為(不斷地)在cfr
ee_cf
ree
的全部邊界周圍削掉薄薄的一層。如果反覆迭代,最大間隙路徑是唯一剩下的部分。
為了構建最大間隙路線圖,再次使用特徵概念。讓特徵集引用cob
s_cobs
的所有邊和頂點集。規劃路徑的候選路徑由每對特性生成。這導致了乙個簡單的o(n
4)o(n^4)
o(n4
)演算法,如下所示。邊~邊、點~點為直線,點~邊為拋物線。實際上,位於最大間隙路線圖上的路徑的部分是通過交叉曲線來確定的。有幾種演算法提供更好的時間複雜度,但它們更難以實現。最著名的演算法為o(n
lgn)
o(n\lg)
o(nlgn)
,其中n
nn是曲線的數目。
求多邊形包圍區域
求多邊形包圍區域 已知單元格中,黑色部分為封閉邊緣,如何求出綠色部分也在包圍圈之內?有了上面的概念之後,只需要選定乙個點作為起點並沿邊緣走一圈再回到起點,通過判斷向左側拐和向右拐的次數,若左拐次數大於右拐次數則為左側包圍,反之為右側包圍。在給定的包圍順序下判定了左 右 側包圍,遍可獲得包圍區域 以上...
進出多邊形區域 圓形判斷
typedefstructtagst point st point 功能 判斷點是否在多邊形內 方法 求解通過該點的水平線 射線 與多邊形各邊的交點 結論 單邊交點為奇數,成立 引數 p 指定的某個點 ptpolygon 多邊形的各個頂點座標 首末點可以不一致 ncount 多邊形定點的個數 說明 ...
opencv 提取多邊形mask區域
最近在專案中需要提取多邊形區域,並傳入到運算元中計算,故記錄一下對多邊形mask區域的提取方法。include using namespace cv int main 關鍵函式為 fillpoly,該函式提供兩種呼叫介面,分別如下 void fillpoly mat img,const point ...