用EasyX繪製多球碰撞中的碰撞程式碼
阿新 • • 發佈:2019-02-10
float minDistances2[BallNum][2]; // 記錄某個小球,距離它最近的小球的距離,這個小球的下標
for (i=0;i<BallNum;i++)
{
minDistances2[i][0] = 9999999;
minDistances2[i][1] = -1;
}
// 求解所有小球兩兩之間的距離平方
for (i=0;i<BallNum;i++)
{
for (j=0;j<BallNum;j++)
{
if (i!=j) // 自己和自己不需要比
{
float dist2;
dist2 = (ball_x[i] - ball_x[j])*(ball_x[i] - ball_x[j])
+ (ball_y[i] - ball_y[j])*(ball_y[i] - ball_y[j]);
if (dist2<minDistances2[i][0])
{
minDistances2[i][0 ] = dist2;
minDistances2[i][1] = j;
}
}
}
}
// 判斷球之間是否碰撞
for (i=0;i<BallNum;i++)
{
if (minDistances2[i][0]<=4*radius*radius) // 最小距離小於閾值,發生碰撞
{
j = minDistances2[i][1 ];
// 交換速度
int temp;
temp = ball_vx[i]; ball_vx[i] = ball_vx[j]; ball_vx[j] = temp;
temp = ball_vy[i]; ball_vy[i] = ball_vy[j]; ball_vy[j] = temp;
minDistances2[j][0] = 999999999; // 避免交換兩次速度,又回去了
minDistances2[j][1] = -1;
}
}