1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
// écartement signé entre le cercle (Xc, Yc) et le centre de la brique (Xb, Yb)
dX = Xb - Xc;
dY = Yb - Yc;
// les deux points sur le périmètre (R = rayon du cercle)
Xp1 = Xc + dX*R/sqrt(dX*dX + dY*dY);
Yp1 = Yc + dY*R/sqrt(dX*dX + dY*dY);
Xp2 = Xc - dX*R/sqrt(dX*dX + dY*dY);
Yp2 = Yc - dY*R/sqrt(dX*dX + dY*dY);
// l'un des deux points du périmètre dans la brique?
// dXb = largeur d'une brique, dYb = hauteur d'une brique
boolean bCollision = pointDansRectangle(Xp1, Yp1, Xb - dXb/2, Yb - dYb/2, Xb + dXb/2, Yb + dYb/2);
bCollision = !bCollision && pointDansRectangle(Xp2, Yp2, Xb - dXb/2, Yb - dYb/2, Xb + dXb/2, Yb + dYb/2);
// le centre de la brique entre les deux points du cercle (que l'on verra
// comme formant un rectangle, même si celui-ci est réduit à un segment) ?
bCollision = !bCollision && pointDansRectangle(Xb, Yb, Xp1, Yp1, Xp2, Yp 2); |
Partager