我在一个数组中绘制了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]);
}
}
答案 0 :(得分:6)
如果两个圆的中心点之间的距离小于其半径的相加,则它们相交。你需要迭代你的每一个圆圈,然后互相检查这个圆圈。
例如,假设您在横轴上有这两个圆圈:
(-----o-----) (---o---)
它们不相交,因为它们的中心点之间的距离是12,它们的半径之和是8.但是,这两个做了:
(-----o----(-)--o---)
两个2D点之间的距离公式为:
var xdiff = x2 - x1;
var ydiff = y2 - y1;
return Math.Sqrt(xdiff * xdiff + ydiff * ydiff);
答案 1 :(得分:4)
如果r1和r2是两个圆的半径,d是两个圆的中心之间的距离则为
d<=r1 + r2;
时反弹
理想情况下,您应该在d == r1 + r2;
只是一个建议:
同时保持圆的质量与它们的r(半径)成正比,然后使用守恒动量定律m1v1 = m2v2;
以一种看似真实的方式反弹它们