Dobry wieczór,
Szukam pomocy przy wykrywaniu kolizji pomiędzy dwoma kwadratami podanymi rotacją. Po mimo wielu poradników nie dałem sobie jednak rady z tym zagadnienie.
Potrafię już wykrywać kolizje na osi x i osi y, przy rotacjach konieczna jest jednak dodatkowa oś (co najmniej jedna) np P. W teorii potrafię jeszcze zrozumieć jak miało by to działać, mam jednak problem z napisaniem sprawnego kodu.
Na razie udało mi się zapisać coś takiego:
//player vector
float lenght_box_p = odl(box_xy, box.getTransform().transformPoint(box.getPoint(0)));
//line vector
float lenght_line_p = odl(line_xy, line.getTransform().transformPoint(box.getPoint(0)));
// center vector
float lenght_center_p = odl(line_xy, box_xy);
// angle
float angle = cos((rotations * M_PI) / 180);
//////////////////////////////////////
// radians = (degrees * Pi) / 180 //
// //
// degrees = (radians * 180) / Pi //
//////////////////////////////////////
//box projection
float projection_box_p = lenght_box_p * angle;
//line projection
float projection_line_p = lenght_line_p * angle;
float gap_p1 = lenght_center_p - projection_box_p - projection_line_p;
if (gap_p1 <0)
{
p1 = true;
}
Kod poprawnie działa np przy rotacji 45 (oba obiekty mają tą samą rotacje), przy 59 stopniach obiekty mogą się już jednak przenikać.
Pozdrawiam