2 回答

TA貢獻1797條經(jīng)驗 獲得超6個贊
讓我建議對您的網(wǎng)格稍作修改。目前,您為每個單元存儲單元中心所屬的多邊形。相反,存儲與單元格重疊的所有多邊形。然后,每當您看到一個單元格只有一個重疊的多邊形時,您就不需要進行任何包含測試。網(wǎng)格可以通過保守光柵化的方法構(gòu)建(請注意,引用的文章不是針對保守的,而是針對一般光柵化的)。
網(wǎng)格的效率與單個多邊形單元格和總單元格的比率相關(guān)(因為這是不必執(zhí)行多邊形包含測試的概率)。存儲本身非常便宜。您可以使用密集數(shù)組并持續(xù)訪問單元格。因此,從理論的角度來看,您應該擁有盡可能多的單元格(因為單元數(shù)越多,單多邊形單元格比率就會增加)。在實踐中,您可能會發(fā)現(xiàn)緩存和其他內(nèi)存效應可能會使大型網(wǎng)格變得不切實際。但是,除了測試之外,沒有其他好的方法可以知道。因此,只需在幾臺不同的機器上嘗試幾種尺寸并嘗試找到合適的尺寸即可。
如果我不得不猜測,我會說您的單元格應該是方形的,并且面積約為平均多邊形面積的 1% - 5%。此外,與許多細長多邊形相比,可以更有效地處理更緊湊的多邊形。

TA貢獻1853條經(jīng)驗 獲得超18個贊
選擇任意點并從該點筆直向下畫一條線。您命中的第一個多邊形邊會告訴您該點所在的多邊形。
因此,如果您不想進行多邊形測試,那么與其將空間劃分為規(guī)則網(wǎng)格,不如先將其切割成垂直切割的條帶,這些條帶穿過所有多邊形交叉點。
現(xiàn)在,在每個條帶內(nèi),沒有多邊形邊交叉或結(jié)束,因此您可以從下到上制作所有這些邊的有序列表。
如果要查找包含點的多邊形,請使用 x 坐標進行二分搜索以找到合適的條帶。然后在跨越條帶的邊列表中,您可以使用 y 坐標進行二分搜索以找到該點下方最近的一條,并告訴您該點所在的多邊形。
谷歌“梯形分解”可以找到很多關(guān)于類似技術(shù)的信息。
- 2 回答
- 0 關(guān)注
- 230 瀏覽
添加回答
舉報