Kirjautuminen

Haku

Tehtävät

Kilpailu

Putka Open 2025
Alkaa syyskuussa!

Keskustelu: Ohjelmointikysymykset: Kulma (cos) & (sin) (C++)

Sivun loppuun

kayttaja-3842 [28.07.2007 09:55:42]

#

juu elikkäs pitäs saada selville, että kuinka pelaajaa liikutetaan esim jos kulma = 85 , niin paljon sitten x:ään ja y:tä lisätään että pelaaja liikkuu nappia ylöspäin painaessa 85 aseteen suuntaisesti.

Itse kyhäilin tälläistä mutta ei oikein onnistunut

Funktiot:

int pyorita_x(SDL_Surface *kuva,int x,int y,int kulma){


int uusi_x = x*cos(kulma) - y*sin(kulma);
return uusi_x;
}

int pyorita_y(SDL_Surface *kuva,int x, int y,int kulma){


int uusi_y = y*cos(kulma) + x*sin(kulma);
return uusi_y;
}

Käyttö:

if (nappi[SDLK_UP]){
pelaaja.x = pyorita_x(pelaaja1,pelaaja.x,pelaaja.y,pelaaja.kulma);
pelaaja.y = pyorita_y(pelaaja1,pelaaja.x,pelaaja.y,pelaaja.kulma);
    }

Legu [28.07.2007 11:05:49]

#

if (nappi[SDLK_UP]) {
	pelaaja.x += cos(pelaaja.kulma);
	pelaaja.y += sin(pelaaja.kulma);
}

Ei liene sen monimutkaisempaa?
Sitten tuohon lisäät vielä jonkin kertoimen, jotta pelaaja liikkuu sopivalla nopeudella.

Niin ja sitten pitää muistaa että jos haluaa pelistä sellaisen, että pelaaja liikkuu päivitysnopeudesta rippumatta aina saman verran tietyssä ajassa, niin pitää tuo ajan muutos vielä suhteuttaa tuohon - eli esim. kertoa sillä.

Grez [28.07.2007 11:19:51]

#

Ja sitten tulee mieleen, että kulman ei ehkä kannata olla int. Tai ainakin 85 astetta on hieman hankala saavuttaa koska loogisesti 85° on 1,484, mutta sehän pyöristyisi arvoksi 1, joka on 57,296°.... Toki 85° on mahdollista saavuttaa kokonaislukuradiaaneillakin (vaikka 65799), mutta aika hankalaksi menee.

Jaska [28.07.2007 11:52:29]

#

Grez kirjoitti:

Toki 85° on mahdollista saavuttaa kokonaislukuradiaaneillakin (vaikka 65799), mutta aika hankalaksi menee.

Ei ole. Pii on nimittäin transkendenttiluku.

kayttaja-3842 [28.07.2007 12:18:41]

#

Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?

Grez [28.07.2007 12:19:24]

#

Jaska kirjoitti:

Ei ole. Pii on nimittäin transkendenttiluku.

Noh noh, eipäs nyt nussita pilkkua. Pointti oli että riittävän lähelle 85° (tässä tapauksessa 3 desimaalin tarkkuudella), eihän tarkasti 85° ole mahdollista saavuttaa radiaaneina käyttämällä liukulukuakaan.

kayttaja-3842 kirjoitti:

Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?

En näe ongelmaa, puhe oli kulmasta, ei X:stä tai Y:stä.

kayttaja-3842 [28.07.2007 12:24:42]

#

Grez kirjoitti:

kayttaja-3842 kirjoitti:

Joo mutta ongelmahan on se, että kun SDL:än BlitSurfacen x ja y ei voi olla float tai yleensäkkään mikään liukuluku muuttuja?

En näe ongelmaa, puhe oli kulmasta, ei X:stä tai Y:stä.

Jaa niin tosiaankin.


Edit1:

Mutta nytten se toimii kiitosta vaan.

Jaska [29.07.2007 11:24:21]

#

Grez kirjoitti:

Jaska kirjoitti:

Ei ole. Pii on nimittäin transkendenttiluku.

Noh noh, eipäs nyt nussita pilkkua.

En nussikaan. Matematiikka on hyvin eksakti tiede ja ei siinä pidä asioita sanoa sen kummemmin miettimättä. Olen tässä tapauksessa tarkka, mutta en viisastelija. Olisit alun perin sanonut, että kyseinen arvo saadaan riittävän lähelle 85 astetta l^1-normin suhteen, niin mitään ongelmaa ei olisi ollut!

Grez [29.07.2007 15:46:34]

#

Jaska kirjoitti:

En nussikaan. Matematiikka on hyvin eksakti tiede...

Itse olisin kyllä eri mieltä, sillä:
- tämä on ohjelmointifoorumi eikä matematiikkafoorumi
- aihe oli enemmän käytännönläheinen kuin teoreettinen
- funktioilla joita tässä yhteydesäs käsiteltiin ei muutenkaan voi käyttää tarkkoja arvoja.


Sivun alkuun

Vastaus

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

Tietoa sivustosta