簡體   English   中英

在Boost :: Geometry :: Polygon中找到一個點

[英]Finding a point inside a Boost::Geometry::Polygon

我有一個Polygon對象,我正在尋找一種有效的方法來嚴格地在其內部(而不是在其邊界上)找到任何點。 最好的方法是什么?

我有以下想法,但我不太喜歡:

  1. 對多邊形進行三角剖分並在三角剖分邊之一上報告一個點(過於昂貴)。
  2. 檢查多邊形的纏繞方向並報告一個位於距多邊形邊緣之一的ε距離內的點(在邊緣情況下不起作用)。

給定多邊形,您可以找到多邊形與平行於x軸的直線相交並位於多邊形的yMin和yMax之間的兩個點(下圖中的0和1)。

這些點之間的任何點都將在多邊形內。 基本思想來自於掃描轉換多邊形-即這些是您要填充的點。 第二點之后的線段的繞線為0或2,具體取決於您的多邊形。

必須先進行兩個交叉(或最后一個交叉),因為交叉點是沿x軸排序的。

基本思路

一些極端情況:

  1. 如果您忽略僅接觸線的多邊形的所有點,則在某些情況下可能會失敗(下圖)。
  2. 如果多邊形中有重疊線,則必須解決這些重疊線。

問題

為避免出現第一個問題,請確保將第一個點作為確定的交叉點,而下一個點可以是交叉點或多邊形僅接觸線的點。

最后

無需使用大多數語言的任何特殊功能,即可輕松實現這一目標。 由於我不熟悉Boost方法,因此我在javascript中發布了基本概念的草圖。

該繪圖是使用paper.js完成的-盡管此處概述的算法代碼本身是包含在內的

您可以將其轉換為C ++,只要您可以枚舉Boost :: polygon中的所有點即可

這是演示

暫無
暫無

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

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