3
我在for循環中生成隨機值,我想測試下一個即將生成的值是否不在其他任何值附近,如果是這樣我想將它放在公差半徑之外,這是我到目前爲止有:如何創建一個遞歸方法來比較兩個值?
int spacing = 30;
// create a bunch of random points
for (int i = 0; i < MAX_NUMBER_OF_DOTS; i++)
{
ofVec2f point(ofRandom(spacing, ofGetWidth() - (spacing + spacing)), ofRandom(spacing, ofGetHeight() - (spacing + spacing)));
// Loop trough previously create points and check its distance
for (int j = 0; j < dots.size(); j++)
{
ofVec2f testPoint = dots[j];
float minDistance = 20.0f;
// If the point is too close move it to a random point around it
if (point.distance(testPoint) < minDistance)
{
point.x += cos(ofRandom(TWO_PI)) + minDistance;
point.y += sin(ofRandom(TWO_PI)) + minDistance;
}
}
dots.push_back(point);
}
凡dots
是vector<ofVec2f> dots;
是不完美的,因爲新的計算點並沒有考慮到近先前創建的帳戶點,所以我覺得遞歸方法可以幫助我解決了這個問題。
你可以在你的代碼中包含'ofVec2f'嗎? – cybertextron 2012-07-19 16:08:17
@philippe這裏是一個forVec2f的參考http://www.openframeworks.cc/documentation/math/ofVec2f.html希望有幫助 – 2012-07-19 16:10:10
你可以重新開始你所有點的檢查(而不是繼續你在哪裏循環)後,選擇一個新點,以確保此新位置也不在任何先前檢查點附近。請注意,這種方法可能需要很長時間才能計算出您是否有多個點和/或當前存在的點是否覆蓋了大部分可用區域 – Attila 2012-07-19 16:58:36