[英]Detecting collision between circles drawn in an array c#
我在一個數組中繪制了10個圓圈,這些圓圈在四處移動並在屏幕上反彈。 我如何拍攝這些繪制的圓圈並檢測它們何時相互碰撞。 當他們碰撞時,我需要他們互相反彈。 這些圓圈具有隨機寬度和高度。 隨機速度和所有在中心屏幕上產卵。
如何繪制圓圈:
private void pbGamescreen_Paint(object sender, PaintEventArgs e)
{
for (int mt = 0; mt < spawn; mt++)
{
e.Graphics.FillEllipse(ballBrush[mt], (int)xPos[mt], (int)yPos[mt], ballSizex[mt], ballSizey[mt]);
e.Graphics.DrawEllipse(Pens.Gray, (int)xPos[mt], (int)yPos[mt], ballSizex[mt], ballSizey[mt]);
}
}
如果兩個圓的中心點之間的距離小於其半徑的相加,則它們相交。 你需要迭代你的每個圓圈,然后互相檢查這個圓圈。
例如,假設您在水平軸上有這兩個圓圈:
(-----o-----) (---o---)
它們不相交,因為它們的中心點之間的距離是12,並且它們的半徑之和是8.但是,這兩個做:
(-----o----(-)--o---)
兩個2D點之間距離的公式為:
var xdiff = x2 - x1;
var ydiff = y2 - y1;
return Math.Sqrt(xdiff * xdiff + ydiff * ydiff);
如果r1和r2是兩個圓的半徑,則d是兩個圓的中心之間的距離
當d<=r1 + r2;
時反彈d<=r1 + r2;
理想情況下,當d == r1 + r2;
時你應該這樣做d == r1 + r2;
只是一個建議:保持圓的質量與它們的r(半徑)成比例,然后使用守恆動量定律m1v1 = m2v2;
以一種看起來真實的方式反彈他們
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.