Kolizja okrąg vs okrąg (obecne wątki na forum mi nie pomogły )
Ostatnio zmodyfikowano 2014-01-28 09:46
Madrei Temat założony przez niniejszego użytkownika |
Kolizja okrąg vs okrąg (obecne wątki na forum mi nie pomogły ) » 2014-01-27 19:58:54 #include <SFML/Graphics.hpp> #include <cmath> class COb { private: sf::CircleShape Rec; float roz; float Px, Py; public: void setX( float ix ) { roz = ix; } float getX() { return roz; } void setPX( float ix ) { Px = ix; } void setPY( float ix ) { Py = ix; } float getPX() { return Px; } float getPY() { return Py; } void Pozycja() { Rec.setPosition( Px, Py ); } void rysuj( sf::RenderWindow & okno ) { okno.draw( Rec ); } COb() { setX( 20 ); setPX( 50 ); setPY( 50 ); Rec.setRadius( roz ); Rec.setPosition( Px, Py ); } COb( float ix, float iy, float ir ) { setX( ir ); setPX( ix ); setPY( iy ); Rec.setRadius( roz ); Rec.setPosition( Px, Py ); } ~COb() { } }; int main() { sf::RenderWindow app( sf::VideoMode( 800, 600 ), "Kolizje" ); COb r1( 100, 100, 10 ); COb r2( 100, 200, 20 ); bool koliz = false; while( app.isOpen() ) { sf::Event event; while( app.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) app.close(); if(( pow( pow(( r1.getPX() + r2.getPX() ), 2 ) + pow(( r1.getPY() + r2.getPY() ), 2 ), 2 ) ) <= pow(( r1.getX() + r2.getX() ), 2 ) ) { koliz = true; } if( koliz == true ) { r1.setPX( 3 ); r1.setPY( 3 ); } if( koliz != true ) { if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::A ) { float a = r1.getPX() - 1; r1.setPX( a ); } if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::D ) { float a = r1.getPX() + 1; r1.setPX( a ); } if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::W ) { float a = r1.getPY() - 1; r1.setPY( a ); } if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::S ) { float a = r1.getPY() + 1; r1.setPY( a ); } } } app.clear( sf::Color( 10, 20, 100, 200 ) ); r1.Pozycja(); r2.Pozycja(); r1.rysuj( app ); r2.rysuj( app ); app.display(); } return EXIT_SUCCESS; }
Dlaczego nie wykrywa kolizji ?? |
|
alixir |
» 2014-01-27 20:24:42 Na moje oko if(( pow( pow(( r1.getPX() + r2.getPX() ), 2 ) + pow(( r1.getPY() + r2.getPY() ), 2 ), 2 ) ) <= pow(( r1.getX() + r2.getX() ), 2 ) ) zły warunek. Według mnie powinien wyglądać tak: if( sqrtf( pow(( r1.getPX() - r2.getPX() ), 2 ) + pow(( r1.getPY() - r2.getPY() ), 2 ) ) <=( r1.getX() + r2.getX() ) ) |
|
pekfos |
» 2014-01-27 22:14:00 Według mnie powinien wyglądać tak: |
Tylko potęga była zła, w jednym pow(). Poza tym, pchanie się w pierwiastki to zły pomysł. |
|
Madrei Temat założony przez niniejszego użytkownika |
» 2014-01-28 09:46:49 Dzięki za podpowiedź działa. 2 błędy: - nie wiem po co dodawałem współrzędne :D. - nie pierwiastkuje prawej strony to powinienem podnieść prawą do kwadratu i skoro podniosłem całość do 2 potęgi to wychodzi że mam 4 po prawej :) |
|
« 1 » |