簡體   English   中英

Boost Geometry:多邊形和盒子的交集

[英]Boost Geometry: intersection of a polygon and a box

我一直在嘗試使用Boost幾何庫對算法進行編碼(如果需要的話,嘗試對盒計數算法進行編碼),而其中的一部分在於處理多邊形。 盡管我想計算多邊形邊界與大量盒子(網格)的交點,但如果願意,可以使用其外環。 奇怪的是,函數相交(box [i],多邊形)相交(box [i],exterior_ring(多邊形))和內(box [i],多邊形)給我相同的結果。 對於完全位於多邊形內部的盒子,我應該得到true,false和true。 對於邊界上的一個,真,真,假。 為什么它沒有按照我認為的方式進行計算?

您的問題是關於3個功能的:

  1. 相交(框,多邊形)
  2. 相交(框,環)
  3. 內(盒,環)

讓我從#3開始。 該函數只支持箱箱和箱點輸入。 這意味着環被隱式轉換為其邊界框,並且您得到的答案是正確的(當一個框在另一個框內時,它們被視為與幾何形狀相交)。

對於#2,即使框在圓環內,您似乎也想獲得“ false”。 這意味着您想將環(輪廓)視為多段線(也稱為“線串”)。 您應該向Boost.Geometry進行解釋,以將環視為線串。

為此,您可能可以將輪廓(或環形)點容器“包裝”到某個類中,然后將該類注冊為線串(或多線串)。 該類本身可能非常輕巧,只需保持指向容器的指針並提供適當的const訪問即可。 您可以使用宏BOOST_GEOMETRY_REGISTER_LINESTRINGBOOST_GEOMETRY_REGISTER_MULTI_LINESTRING將其注冊為線串。

之后,將其大致作為intersects(my_linestring_wrapper(polygon), box_view(box[i]))傳遞給“相交” intersects(my_linestring_wrapper(polygon), box_view(box[i])) 這里的代碼box_view(box[i])將返回一個輕量級的對象,該對象的行為類似於“環”(輪廓)。

對於#1,您可以獲得Box-Box或Ring-ring相交。 要強制使用后者,您需要將盒子視為環。 在Boost.Geometry中實現此目的的標准方法是在框上應用適當的“視圖”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM