簡體   English   中英

檢測數組c中繪制的圓之間的碰撞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM