Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kulman laskeminen

Gaxx [14.11.2004 20:04:11]

#

Teen peliä, jossa liikutaan samaan tyyliin kuin esimerkiksi diabloissa. Ongelmana kuitenkin on, etten saa laskettua hiiren ja ukon muodostaman suoran ja X-akselin välistä kulmaa. Kuinka tämän siis saa laskettua?

Ei tää trikonometria taida olla kovin hyvin hallussa...

Edit: typo

setä [14.11.2004 20:18:17]

#

Jos ukon koordinaatit ovat ux, uy ja hiiren hx, hy, saadaan kulman tangentti kaavasta:
tan(a) = (uy - hy)/(ux - hx). Tästä saadaan kulmalle kaava:
a = ATAN((uy - hy)/(ux - hx))
Kielestä riippuu, kuinka tuo tehdään ohjelmakoodiin. Täytyy erikseen tarkistaa, ettei jakaja ole nolla tai käyttää funktiota ATAN2(uy-hy,ux-hx) tai jotain vastaavaa.

Gaxx [14.11.2004 20:34:52]

#

Tuollaisen kaavan itsekin sain johdettua, mutta eipä tunnu toimivan. Sanokaas nyt sitten onko muussa koodissa jotain vikaa?

rad = Atn((Hero.y - MPos.y) / (Hero.x - MPos.x))
Hero.x = Hero.x + Sin(rad) * 3
Hero.y = Hero.y + Cos(rad) * 3

Metabolix [14.11.2004 21:09:37]

#

Diabloissahan liikutaan ruudukkosysteemillä, ei siihen mitään trigonometriaa tarvita..? Kai nuo koordinaatit on ilmoitettu liukulukuina eikä kokonaislukuina? Se selittäisi kaikki ongelmat. Muuten en löydä tuosta sen kummempia vikoja, enintään tyyppi liikkuu väärään suuntaan, mutta se selviää tarvittaessa vaihtelemalla lukujen paikkoja... (y / x -> x / y)

tn [14.11.2004 21:10:26]

#

Atn palauttaa oikean arvon vain välillä -pi/2..pi/2. Eli lisää sen perään:

rad = Atn((Hero.y - MPos.y) / (Hero.x - MPos.x))
if (Hero.x - MPos.x) < 0 then
    rad = rad + pi
Hero.x = Hero.x + Sin(rad) * 3
Hero.y = Hero.y + Cos(rad) * 3

(Hmm, toivottavasti se meni oikein.)

Gaxx [14.11.2004 22:08:23]

#

Nyt koodin pitäisi olla tuolta osin kunnossa. Kiitos!

Vastaus

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

Tietoa sivustosta