Kolizje dowolnego trójkąta z prostokątem (zaznaczanie trójkątów)
Ostatnio zmodyfikowano 2024-11-10 17:15
tBane Temat założony przez niniejszego użytkownika |
» 2024-11-10 17:07:35 Ja napisałem coś takiego i byłem pewien, że to zadziała. Ale nie działa. Algorytm najpierw oblicza współczynniki dwóch równań y = ax + b. Następnie szuka punku wspólnego tych prostych. Na końcu sprawdzane jest czy punkt wspólny mieści się w zakresie (bounding box) tych dwóch odcinków. Gdzieś zrobiłem bląd logiczny. Pytanie do Was gdzie popełniam błąd ? bool intersectionTwoLines( sf::Vector2f p1, sf::Vector2f p2, sf::Vector2f q1, sf::Vector2f q2 ) { if( p1.x > p2.x ) { sf::Vector2f p = p1; p1 = p2; p2 = p; } if( q1.x > q2.x ) { sf::Vector2f q = q1; q1 = q2; q2 = q; } float a1, b1; a1 =( p2.y - p1.y ) /( p2.x - p1.x ); b1 = p1.y - a1 * p1.x; if( p2.x - p1.x < 0 ) { a1 *= - 1.0f; b1 *= - 1.0f; } float a2, b2; a2 =( q2.y - q1.y ) /( q2.x - q1.x ); b2 = q1.y - a2 * q1.x; if( q2.x - q1.x < 0 ) { a2 *= - 1.0f; b2 *= - 1.0f; } if( a1 == a2 ) return false; sf::Vector2f center; center.x =( b2 - b1 ) /( a1 - a2 ); center.y = a1 * center.x + b1; float min_x_line1 = min( p1.x, p2.x ); float min_x_line2 = min( q1.x, q2.x ); float min_x = min( min_x_line1, min_x_line2 ); float min_y_line1 = min( p1.y, p2.y ); float min_y_line2 = min( q1.y, q2.y ); float min_y = min( min_y_line1, min_y_line2 ); float max_x_line1 = max( p1.x, p2.x ); float max_x_line2 = max( q1.x, q2.x ); float max_x = max( max_x_line1, max_x_line2 ); float max_y_line1 = max( p1.y, p2.y ); float max_y_line2 = max( q1.y, q2.y ); float max_y = max( max_y_line1, max_y_line2 ); if( center.x <= max_x && center.x >= min_x && center.y <= max_y && center.y >= min_y ) return true; return false; }
|
|
DejaVu |
» 2024-11-10 17:10:17 Pytanie do Was gdzie popełniam błąd ?
Popełniasz przede wszystkim błąd, że próbujesz sam 'zaimplementować' coś, co jest 'rozwiązane' w prostszy i bardziej efektywny sposób :) A jeżeli chodzi o kod... to musisz podłubać debuggerem, albo zapytać ChatGPT gdzie zrobiłeś błąd. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-11-10 17:15:14 Ok. No dobra, skorzystam z Twojego algorytmu. W każdym bądź razie dzięki. Będę mógł wreszcie napisać kolizje z mesh'ami obiektów :-) |
|
1 « 2 » |