Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kulman laskeminen

Macro [06.01.2010 13:10:50]

#

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.

Teuro [06.01.2010 13:16:17]

#

#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;
}

Sami [06.01.2010 13:17:23]

#

http://en.wikipedia.org/wiki/Atan2

Metabolix [06.01.2010 13:17:34]

#

Luepa toinen matematiikkaopas, siitä erityisesti analyyttista geometriaa (koordinaatistoja) ja trigonometriaa (siniä ja kosinia) koskevat osat.

Gaxx [06.01.2010 13:21:52]

#

Muistelisin, että std::atan ei anna oikeaa vastausta kaikissa tilanteissa(yksikköympyrän vasen puoli?). Kannattanee siis käyttää std::atan2 -funktiota.

Teuro [06.01.2010 13:24:45]

#

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?

Sami [06.01.2010 13:29:56]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta