2015-03-01 1 views
2

Я рисую 10 кругов в массиве, эти круги перемещаются и прыгают по экрану. Как бы я взял эти круги и обнаружил, когда они сталкиваются друг с другом. Когда они сталкиваются, мне нужно, чтобы они отскакивали друг от друга. Эти круги имеют случайную ширину и высоту. случайных скоростях и всех появлениях на центральном экране.Обнаружение столкновения между кругами, нарисованными в массиве C#

Как круги нарисованы:

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

ответ

6

Две окружности пересекаются, если расстояние между их центральными точками меньше, чем добавление их радиусами. Вам нужно повторить каждый из ваших кругов и проверить это против друг друга.

Например, у вас есть эти два круга по горизонтальной оси:

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

Они не пересекаются, а расстояние между их центральными точками составляет 12, а сумма их радиусов равна 8. Однако , эти два делают:

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

формула расстояния между двумя точками 2D:

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

, если r1 и r2 радиусы двух окружностей, и d расстояние между центрами Teh двух кругов, то

отскакивают когда d<=r1 + r2;
в идеале вы должны сделать это, когда d == r1 + r2;

Просто предложение : также сохраняют массу круга пропорциональной их r (радиусу), а затем используя закон сохранения импульса m1v1 = m2v2; отскакивают их отфф таким образом, который выглядит реальным

Смежные вопросы