Terveppä terve
Jos minulla on muuttujat x ja y joissa on hiiren sijainti, niin miten voin laskea kulman suhteeseen käännettävään kohteeseen?
Tarkoitus olisi kääntää pelihahmoa hiirenosoittamaan suuntaan.
#include <cmath> #include <iostream> int main(){ double hahmo_x = 150; double hahmo_y = 200; double hiiri_x = 80; double hiiri_y = 34; double d_y = (hahmo_y - hiiri_y); double d_x = (hahmo_x - hiiri_x); double kulma = std::atan(d_y / d_x); std::cout << (kulma * 180) / 3.14 << std::endl; return EXIT_SUCCESS; }
Luepa toinen matematiikkaopas, siitä erityisesti analyyttista geometriaa (koordinaatistoja) ja trigonometriaa (siniä ja kosinia) koskevat osat.
Muistelisin, että std::atan ei anna oikeaa vastausta kaikissa tilanteissa(yksikköympyrän vasen puoli?). Kannattanee siis käyttää std::atan2 -funktiota.
Gaxx kirjoitti:
Muistelisin, että std::atan ei anna oikeaa vastausta kaikissa tilanteissa(yksikköympyrän vasen puoli?). Kannattanee siis käyttää std::atan2 -funktiota.
Pitää kutinsa, joskin mikäli pisteet ovat päällekäin d_x == 0 taitaa tulla myös ongelmia, kun kulma kasvaa kohti ääretöntä. Vai oliko tuokin otettu huomioon?
Eihän atan:ssa mitään muuta vikaa ole kuin se, että y/x = -y/-x ja -y/x = y/-x, jolloin tietysti myös atan(-y/-x) = atan(y/x) eli se ei erottele pisteen vastakkaisia puolia toisistaan vaan se jää koodaajan tehtäväksi. Lisäksi tietysti y/x ei ole määritelty kun x = 0.
Aihe on jo aika vanha, joten et voi enää vastata siihen.