2011-05-05 66 views
2

給出的是具有多邊形的2D。我需要找出位於該區域內的給定線段的垂直視線中可見的多邊形。例如從邊緣看多邊形的可見性

A sample example of the problem

  • 此外,

    什麼可以是優化時的多邊形僅具有垂直和水平邊緣。

+0

是線段往往不是一路所有多邊形的左邊(或他們的權利)?或者這些細分還可以位於多邊形的中間? – 2011-05-07 09:22:21

+0

他們可以在中間。在這種情況下,該多邊形應作爲單獨的結果報告。 – Xolve 2011-05-07 13:21:50

回答

2

我建議以下...

  • 旋轉的問題,所以你的段「視線」對齊於x軸。
  • 找到每個多邊形的(軸對齊)邊界矩形(BR)。
  • 使用每個BR的底部邊緣的Y座標對多邊形排序
  • 創建一個限幅「範圍緩衝區」來標記將不再可見的觀看段的各個部分。
  • 對於排序列表中的每個多邊形C(電流)做...
    1. 按C的左右邊界作爲其初始剪輯範圍。
    2. 修剪C的裁剪範圍,範圍已經標記爲「範圍緩衝區」中的裁剪範圍。
    3. 現在對於一個類似的深度的每個隨後的多邊形S(即其中,S的BR底部邊緣開始低於C的BR頂邊)...
      • 循環到下一個S,如果它不水平以C重疊
      • 確定S是否從左邊或右邊重疊(例如通過比較S和C的BR水平中點)。如果S與右側重疊且S的最左側頂點低於C的最右側頂點,則相應地截斷C的裁剪範圍。 (同樣,如果S與左側重疊)
    4. 如果殘差剪切範圍不爲空,則至少部分C在您的觀看段中可見。現在將C的殘差剪切範圍添加到剪輯'範圍緩衝區'中。
+0

謝謝安格斯,這是我非常想找的東西。 – Xolve 2011-05-08 05:52:36

+1

我還應該提到上面的算法只能安全地處理凸多邊形。在應用算法之前,凹面多邊形必須分割成凸多邊形。 – 2011-05-08 06:29:51

+0

感謝您指出:) – Xolve 2011-05-09 05:16:25