2011-04-12 81 views
3

我正在使用Java多邊形對象,該對象存儲一組定義組成該形狀的線的點。在多邊形的一條線上選擇一個隨機點

我該如何去選擇這些行之一的隨機點? Polygon類中是否有任何方法可以使這更簡單?爲了澄清,我想從多邊形邊上的任何位置選取一個隨機點,而不一定是從定義的頂點集合中選取一個隨機點。

回答

5

您需要做的第一件事是找到多邊形的周長。

現在找到一個隨機數,範圍爲0到perimiter。

然後,迭代多邊形的片段,從您的值中減去片段的長度,直到下一個片段的長度大於當前值。

假設你沿着等於你的剩餘價值的線段「走這段距離」,並且你將在外圍有一個隨機點。

================================

另一種可行的選擇是選擇一個隨機段偏向於它們的長度(您可以緩存每個多邊形的閾值),然後在隨機挑選的線段上隨機挑選一個點。大型多邊形的速度會更快(在緩存閾值之後排在第1位),但會經歷兩倍的隨機數。

+2

+1 - 這些方法在外圍給出*均勻分佈的隨機點。 – 2011-04-12 23:20:01

-1

如果數組中有n個點,請使用java Random類。

java.util.Random r = new java.util.Random(); 
int num = r.nextInt(n); // n is the highest random number generated, also the size of the array 
fuctionThatUsesPoint(myPolygon.xpoints[num], myPolygon.ypoints[num]); 
+1

他想要一個線上的隨機點......不是隨機的頂點 – 2011-04-12 23:08:32

+0

對不起,我應該在問題中更加清楚。我想從多邊形邊上的任何位置選取一個隨機點,而不一定是從定義的頂點集合中選取的。 – Matt 2011-04-12 23:09:51

+0

@Matt - 問題很清楚,正如原來寫的,IMO。 – 2011-04-12 23:15:03

2

使用點斜率形式爲連接頂點的邊之一中隨機選擇的邊創建y = mx + b公式。頂點在Polygon.xpointsPolygon.ypoints中定義。

請考慮以下內容:
假設我們有一個五邊形。我們有5個邊和5個頂點。由於我們的頂點存儲在Polygon中,並且需要邊,所以我們需要兩個頂點組成一條線,因此我們在05之間隨機選擇。假設我們隨機生成的號碼爲r = 0

假設xpoints[r] = 1,ypoints[r] = 1,xpoints[r+1] = 2ypoints[r+1] = 4

對於m,我們有

m = (4-1)/(2-1) = 3 

對於點斜的形式,我們有

(y - 1) = m(x - 1) 
(y - 1) = 3(x - 1) --> y = 3x - 2 

現在,選擇兩個X-界之間的隨機x這個優勢,即在域名[0,2],你有你的隨機點(x, y(x))

+0

另外,請注意,如果'r = 5'會發生什麼,我們的數組索引爲6,這是超出範圍。對於'r = 5',我們不用'r + 1'來獲得下一個頂點,而是使用'0'。 – 2011-04-12 23:29:31