3
本質上,我正在做的是將一束隨機的寬度/高度矩形放置到網格上(靠近它的中心),然後將它們全部從彼此推開,直到它們沒有重疊。我有另一個版本,在將它們放置在網格上之前檢查是否存在碰撞,但這不是我在這個版本中要做的。分離真理Javascript
我想知道是否有人可以解釋一個更好的方法來解決這個問題?
我到目前爲止已經試過類似的東西:
讓R1/R2 = Rect1的/ RECT2
do {
var ox = Math.max(0, Math.min(r1.x + r1.w, r2.x + r2.w) - Math.max(r1.x, r2.x)),
oy = Math.max(0, Math.min(r1.y + r1.h, r2.y + r2.h) - Math.max(r1.y, r2.y)),
dx = r2.x - r1.x,
dy = r2.y - r1.y;
if (ox > 0 && oy > 0) {
if (ox >= oy) {
if (r1.x >= r2.x && Math.random() > .1) {
r1.x += ox;
spaced = true;
continue;
} else {
r1.x -= ox;
spaced = true;
continue;
}
} else {
if (r1.y >= r2.y && Math.random() > .1) {
r1.y += oy;
spaced = true;
continue;
} else {
r1.y -= oy;
spaced = true;
continue;
}
}
}
} while (/* stuff */)
隨機只那裏,因爲我將運行到時候一定RECT被來回推動,永遠不會自由並導致無限循環。然而,這種方式效率非常低。
那麼你的問題是什麼?你在尋找更高效的算法嗎?你想知道爲什麼沒有隨機你會得到一個無限循環?現在不清楚你在問什麼。 – Ryan
對,對不起。想知道是否有人可以解釋一個更好的方法來做到這一點,或者讓我找到更好的解決方案 –
TL:DR--它是否需要最終成爲「電網」?還是你想盡可能緊密地安排rects? – slebetman