2010-01-07 110 views
2

我需要爲測試目的創建(大)空間多邊形。有沒有一種算法可以創建一個隨機形狀的多邊形,並保留在邊界的包絡中?我使用OGC Simple的東西,所以創建知名文本的例程是最有用的,選擇的語言是C#,但並不重要。創建封閉的空間多邊形

回答

1

在這裏你可以找到兩個如何生成隨機凸多邊形的例子。他們都是在Java中,但應該很容易將它們改寫爲C#:從太陽

另一種可能的方法隨機點並採用曲面細分算法Delaunay

一般來說,產生合適的隨機多邊形的問題並不是微不足道的。

1

你的邊界包絡是什麼形狀?如果它是一個矩形,然後生成你的隨機多邊形作爲[0,1] x [0,1]內的點列表並縮放到矩形的大小。

如果信封不是矩形,則會變得更棘手。在這種情況下,您可能會獲得最佳性能,只需在單位正方形內生成點並拒絕位於單位正方形部分的任何不在您選擇的邊界包圍範圍內的位置。

HTH

馬克

補充

如果你想只有你會使用的凸包算法中的一個凸多邊形。由於您似乎只想要凸多邊形,因此您可以使用圓形掃描的建議。

但是,您可能會發現沿平行於x軸或y軸的直線掃描會更簡單。假設x軸。

  1. 將點排序爲x次。
  2. 選擇最左邊的(即第一個)點。在這個點的y座標上繪製一個穿過單位正方形的假想水平線。準備沿假想線上方的多邊形的邊界創建一個點列表,並沿着它下面的邊界創建另一個列表。
  3. 選擇下一個點。將其添加到由y座標確定的上邊界或下邊界列表中。
  4. 繼續操作,直到出現問題。

這將生成凸和非凸多邊形,但非凸將是一個相當有限的形式。沒有入口或曲折。

的另一種思路

爲了避免邊交叉,避免產生單位正方形你可以內部的隨機點之後圓形掃:

  1. 產生極座標的單位圓內隨機點即(r,theta)。
  2. 以theta順序對點進行排序。
  3. 轉換爲直角座標。
  4. 將單位圓縮放到您選擇的邊界橢圓。

關閉我的頭頂,這似乎工作確定

+0

好主意,是否有一種'排序'他們的方式,所以沒有交叉線或OGC簡單處理。我能想到的唯一技術就是找到所有點的中心,然後依次循環掃描每個點。 – MrTelly 2010-01-07 12:10:15

+0

我對OGC一無所知,但對計算幾何知之甚少,所以我的幫助不可能比現在更具體。 – 2010-01-07 12:34:12

1

他們是否真的需要是隨機的,或將一些真正的高鐵總站呢?因爲如果會的話,只需去http://koordinates.com/並下載幾層。