我正在使用Java多邊形對象,該對象存儲一組定義組成該形狀的線的點。在多邊形的一條線上選擇一個隨機點
我該如何去選擇這些行之一的隨機點? Polygon類中是否有任何方法可以使這更簡單?爲了澄清,我想從多邊形邊上的任何位置選取一個隨機點,而不一定是從定義的頂點集合中選取一個隨機點。
我正在使用Java多邊形對象,該對象存儲一組定義組成該形狀的線的點。在多邊形的一條線上選擇一個隨機點
我該如何去選擇這些行之一的隨機點? Polygon類中是否有任何方法可以使這更簡單?爲了澄清,我想從多邊形邊上的任何位置選取一個隨機點,而不一定是從定義的頂點集合中選取一個隨機點。
您需要做的第一件事是找到多邊形的周長。
現在找到一個隨機數,範圍爲0到perimiter。
然後,迭代多邊形的片段,從您的值中減去片段的長度,直到下一個片段的長度大於當前值。
假設你沿着等於你的剩餘價值的線段「走這段距離」,並且你將在外圍有一個隨機點。
另一種可行的選擇是選擇一個隨機段偏向於它們的長度(您可以緩存每個多邊形的閾值),然後在隨機挑選的線段上隨機挑選一個點。大型多邊形的速度會更快(在緩存閾值之後排在第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]);
他想要一個線上的隨機點......不是隨機的頂點 – 2011-04-12 23:08:32
對不起,我應該在問題中更加清楚。我想從多邊形邊上的任何位置選取一個隨機點,而不一定是從定義的頂點集合中選取的。 – Matt 2011-04-12 23:09:51
@Matt - 問題很清楚,正如原來寫的,IMO。 – 2011-04-12 23:15:03
使用點斜率形式爲連接頂點的邊之一中隨機選擇的邊創建y = mx + b
公式。頂點在Polygon.xpoints
和Polygon.ypoints
中定義。
請考慮以下內容:
假設我們有一個五邊形。我們有5個邊和5個頂點。由於我們的頂點存儲在Polygon
中,並且需要邊,所以我們需要兩個頂點組成一條線,因此我們在0
和5
之間隨機選擇。假設我們隨機生成的號碼爲r = 0
。
假設xpoints[r] = 1
,ypoints[r] = 1
,xpoints[r+1] = 2
和ypoints[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))
。
另外,請注意,如果'r = 5'會發生什麼,我們的數組索引爲6,這是超出範圍。對於'r = 5',我們不用'r + 1'來獲得下一個頂點,而是使用'0'。 – 2011-04-12 23:29:31
+1 - 這些方法在外圍給出*均勻分佈的隨機點。 – 2011-04-12 23:20:01