Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Sin ja Cos

Sivun loppuun

Kentti [29.09.2006 20:23:36]

#

Ohjelmoinnissa tarvitsisi Sin:iä ja Cos:ia, mutta ei oikein ole auennut, mitä ne on. Googlettamisella löytyi Sin:istä ... Krhm... ja Cos:ista ei mitään muuta kuin jonkin sen nimisen kaupungin nimi. Myöskään Wikipedia ei tällä kertaa auttanut.

Joten, viitsisikö joku selittää lyhyesti, mitä ne ovat / nettisivun osoitteen, josta tietoa löytyy?

Kiitos

(PS. Matskussa vasta potenssioppia käyty, joten noista yllämainituista ei ole ns. hajuakaan :)

rndprogy [29.09.2006 20:36:00]

#

Ne ovat trigonometrisia funktioita.
btw. kokeilitko hakea sin:iä ja cos:ia yhtä aikaa :)?

Latska [29.09.2006 20:45:38]

#

http://fi.wikipedia.org/wiki/Trigonometria

Kentti [29.09.2006 20:47:03]

#

En :)

Ja kyl ton tiesin, mutta muuten...

En siis tiiä, miten ne toimii / miten käyttää, jne :)

Edit: Kiitos :)

Antti Laaksonen [29.09.2006 21:57:01]

#

Kun tiedetään liikkumissuunta ja edettävä matka, voidaan sinin ja kosinin avulla laskea, mihin joudutaan lähtöpisteestä. Sini ilmoittaa matkan pystysuunnassa ja kosini vaakasuunnassa.

Suunta ilmoitetaan kulman avulla, ja yksikkönä on yleensä aste tai radiaani. Nollakulma osoittaa oikealle ja kulma kasvaa joko myötä- tai vastapäivään koordinaatistosta riippuen. Aste on luku väliltä 0 - 360 ja radiaani on luku väliltä 0 - 2 * pii.

Tässä on pari muunnoskaavaa:

aste = (radiaani / pii) * 180
radiaani = (aste / 180) * pii

Luku pii on varmaan tuttu, se on noin 3,14159.

Ohjelmoinnissa kaavat ovat:

uusix = vanhax + cos(kulma) * matka
uusiy = vanhay + sin(kulma) * matka

Esim. Pelaaja on kohdassa (15, 10). Nyt hän liikkuu 5 yksikköä suuntaan 30 astetta. Mihin pelaaja joutuu?

sin(30°) = 0,5 ja cos(30°) = 0,87.
uusix = 15 + 0,87 * 5 = 19,35
uusiy = 10 + 0,5 * 5 = 12,5

Liikkumisen jälkeen pelaaja on kohdassa (19,35; 12,5).

Ohjelmointikielten valmiit funktiot käyttävät yleensä kulman yksikkönä radiaania.

Sinillä ja kosinilla voi tehdä toki paljon muutakin, mutta tämä käyttötarkoitus on aika yleinen ohjelmoinnissa. Jos jokin asia jäi epäselväksi, niin kysy tarkennuksia. Tätä aihetta käsittelen perusteellisemmin tulevassa "Ohjelmoijan matematiikka" -oppaassa.

Kentti [29.09.2006 22:13:58]

#

Ainakin näin alkuun vaikuttaa täysin samalta kuin kääntäjän mukana tulleessa esimerkissä tuo

Antti Laaksonen kirjoitti:

uusix = vanhax + cos(kulma) * matka
uusiy = vanhay + sin(kulma) * matka

Kyllä tällä pitäisi päästä alkuun :)

Pekka Karjalainen [30.09.2006 21:13:49]

#

Tässä on hieman tekemisen ideaa, jos et itse keksi parempaa :-)

Kysymys: Mitä arvoja seuraava C-funktio voi saada?

#include <math.h>


double neliosumma (double kulma) {
  double eka = cos (kulma);
  double toka = sin (kulma);
  return eka*eka + toka*toka;
}

Tee taulukoita eri sinin ja kosinin arvoista. Sen jälkeen voit tutkia, miten saaduista arvoista saa alkuarvot takaisin asin- ja acos-funktioilla. Tämä ei ehkä vaikuta kovin syvälliseltä, mutta se on hyvä tietää.

Käytännön tehtävänä voit laittaa jonkin spriten lentelemään ympyrän kaarta pitkin. Toinen klassinen esimerkki on hiiren osoitinta seuraavat silmät.

En halua mennä asioiden edelle, mutta pistä myös muistiin nimet atan ja atan2. Niilläkin on käyttönsä.

(Tuo a tulee arkus-etuliitteestä, jos haluat hakea webistä tietoa. Arkustangentti ja arkusfunktio ovat suomenkielisiä sanoja.)

Kentti [01.10.2006 15:35:41]

#

Tjaa... C/C++ ei ole lähelläkään tuota tasoa :)

CB:lle noita tietoja tarvin

Draiz [01.10.2006 17:18:05]

#

Antti Laaksonen kirjoitti:

(paljon tekstiä)

Hyvä. Kerrankin joku selvensi edes jotenkin noiden sinin ja kosinin käyttöä niin, että minäkin ymmärsin (ainakin jotenkin). :P

Kentti [01.10.2006 17:33:57]

#

Antti Laaksonen kirjoitti:

Tätä aihetta käsittelen perusteellisemmin tulevassa "Ohjelmoijan matematiikka" -oppaassa.

Juu eiköhän noista ole tulossa joskus..

kayttaja-4976 [01.10.2006 18:30:30]

#

3D-avaruudessa kulman laskeminen voikin olla jo toinen juttu :o. Silloin varmaan ei oo enää asteita vaan vektoreita?

setä [01.10.2006 18:39:35]

#

Kyllä asteita voidaan käyttää 3D-avaruudessakin kuten maapallon pituus- ja leveysasteet. Kolmas koordinaatti on sitten etäisyys pallon keskipisteestä eli säde. Vastaavasti vektorin suunta voidaan ilmaista kahdella kulmalla.

peran [01.10.2006 19:57:01]

#

kayttaja-4976 kirjoitti:

3D-avaruudessa kulman laskeminen voikin olla jo toinen juttu :o. Silloin varmaan ei oo enää asteita vaan vektoreita?

Kumotaan nyt toinenkin väite. Vektoreita voi, ja kannattaa käyttää myös 2D:ssä.

Juhko [13.10.2006 14:46:47]

#

Draiz kirjoitti:

CB:lle noita tietoja tarvin

Mihin? CB:ssähän on valmiina ne uuden kohdan laskemiskomennot.

MoveObject (ukko), 2

Vai johonkin muuhunko?

Kentti [13.10.2006 19:04:17]

#

Esimerkiksi TranslateObjectin kanssa tarvii siniä ja kosinia, kehää kiertävän pallon piirtämiseen tarvii siniä ja kosinia, jne.

Juhko [15.10.2006 16:27:10]

#

Jaa. No eivät minun CB-taidot niin suuria vielä ole. Kun hidas nettini Windowsissa tekee erroria, kun yritän ladata. AAAAAAARGH!!!

msdos464 [16.10.2006 01:12:02]

#

Kentti kirjoitti:

Antti Laaksonen kirjoitti:

Tätä aihetta käsittelen perusteellisemmin tulevassa "Ohjelmoijan matematiikka" -oppaassa.

Juu eiköhän noista ole tulossa joskus..

(offtopick)

Itse haluaisin kiihkeästi oppia käyttämään matriiseja 3D jutuissa.. ainakin regular expressionit opin ihmeellisen helposti putkan oppaasta, muiden oppaiden kanssa tahtoi tuskastua... toivottavasti tuosta oppaasta tulee yhtä helppotajuinen (ja kävisi myös matriisi laskuja läpi).

:)

feenix [16.10.2006 14:47:12]

#

Antti Laaksonen kirjoitti:

Kun tiedetään liikkumissuunta ja edettävä matka, voidaan sinin ja kosinin avulla laskea, mihin joudutaan lähtöpisteestä. Sini ilmoittaa matkan pystysuunnassa ja kosini vaakasuunnassa.

Suunta ilmoitetaan kulman avulla, ja yksikkönä on yleensä aste tai radiaani. Nollakulma osoittaa oikealle ja kulma kasvaa joko myötä- tai vastapäivään koordinaatistosta riippuen. Aste on luku väliltä 0 - 360 ja radiaani on luku väliltä 0 - 2 * pii.

Näihin vielä pari pikkujuttua, eli tuossa ensimmäisessä kappaleessa oletetaan että nollakulma on oikealle. Joillain nollakulma voi olla ylös.

Toinen lisätieto kiinnostuneille on se, että nämä toimivat vain litteällä kaksiulotteisella pinnalla. Esimerkiksi maapallon pinnalla jos lasket pituus- ja leveysasteina suuntia ja liikkumisia, nämä eivät toimi suoraan. Tästä johtuu myös se, että litteässä koordinaatistossa pisteiden a ja b välisen suoran kulma on c astetta, toiseen suuntaan mentäessä kulma on 360-c astetta. Pallopinnalla näin ei välttämättä olekaan. Ja luonnollisesti pallopinnalla lyhin matka on kaari eikä viiva kuten piirrettyjä Batmaneja katsoneetkin tietävät ;)


Sivun alkuun

Vastaus

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

Tietoa sivustosta