Damian Sf
Damian Sf

Reputation: 37

Detecting collision between circles drawn in an array c#

I am drawing 10 circles in an array, these circles are moving around and bouncing across the screen. How would I take these drawn circles and detect when they collide with each other. When they collide I need them to bounce off of each other. These circles have random widths and heights. random speeds and all spawn at center screen.

How the circles are drawn:

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]);
    }
}

Upvotes: 2

Views: 135

Answers (2)

Parv Sharma
Parv Sharma

Reputation: 12705

if r1 and r2 are radiuses of the two circles, and d is the distance between the centers of teh two circles then

bounce off when d<=r1 + r2;
ideally you should do it when d == r1 + r2;

Just a suggestion: also keep the mass of the circle proportional to their r(radius) and then using the law of conservation momentum m1v1 = m2v2; bounce them offf in a way that looks real

Upvotes: 4

zneak
zneak

Reputation: 138051

Two circles intersect if the distance between their center points is smaller than the addition of their radiuses. You need to iterate each of your circle and check this against each other circle.

For instance, say you have these two circles on a horizontal axis:

(-----o-----)  (---o---)

They do not intersect, as the distance between their center points is 12, and the sum of their radiuses is 8. However, these two do:

(-----o----(-)--o---)

The formula for the distance between two 2D points is:

var xdiff = x2 - x1;
var ydiff = y2 - y1;
return Math.Sqrt(xdiff * xdiff + ydiff * ydiff);

Upvotes: 6

Related Questions