0

我在JavaScript中的畫布上的範圍內的隨機位置上畫了一個圓。如何根據JavaScript中的head circle距離生成新的隨機圓圈?

我想在第一個圓的中心的特定距離(200)上的隨機位置上再生成2個圓。

有一種方法可以生成新的座標,直到距離等於200,但應該有更好的解決方案,對嗎?

我該怎麼做?

enter image description here

代碼:

var x = getRandomInt(200, 800) 
var y = getRandomInt(200, 400) 
var r = 60 
drawCircle (x, y, r) 

function getRandomInt(min, max) { 
    return Math.floor(Math.random() * (max - min + 1)) + min 
} 

function drawCircle(x, y, r) { 
    context.beginPath() 
    context.arc(x, y, r, 0, 2 * Math.PI, false) 
    context.fillStyle = "#fc3358" 
    context.fill() 
    context.closePath() 
} 

回答

2

To用中心點(CX,CY)的距離R(這裏爲200)隨機生成一個點,使用簡單的三角公式:

Phi = Random * 2 * Math.PI; //Random in range 0..1 
X = CX + Round(R * Cos(Phi)); 
Y = CY + Round(R * Sin(Phi)); 
+0

太棒了!這就是我一直在尋找的! – Engo

0

您可以使用勾股定理,找出那些從其他200距離的所有點。你基本上是在尋找一個半徑爲200的圓。所以最後你會得到一個函數,你插入那隻小狗並給它分配隨機值。看看距離公式,它可能會清除這個概念。

+0

有沒有比計算所有可能點更好的方法? – Engo

+0

做數學,回來,所以我可以進一步協助你:)。 –

+0

但是,對於這種方法,我仍然需要循環並檢查座標的距離是否等於200,對嗎?有沒有更好的辦法? – Engo

0

您可以使用上面Gabriel指出的畢達哥拉斯定理。如果你不想計算所有的點,你可以指定一組數字是隨機的,那麼你可以操縱該範數來計算第二個數字:b = Sqrt(c^2 - a^2)