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 :)
Ne ovat trigonometrisia funktioita.
btw. kokeilitko hakea sin:iä ja cos:ia yhtä aikaa :)?
En :)
Ja kyl ton tiesin, mutta muuten...
En siis tiiä, miten ne toimii / miten käyttää, jne :)
Edit: Kiitos :)
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.
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 :)
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.)
Tjaa... C/C++ ei ole lähelläkään tuota tasoa :)
CB:lle noita tietoja tarvin
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
Antti Laaksonen kirjoitti:
Tätä aihetta käsittelen perusteellisemmin tulevassa "Ohjelmoijan matematiikka" -oppaassa.
Juu eiköhän noista ole tulossa joskus..
3D-avaruudessa kulman laskeminen voikin olla jo toinen juttu :o. Silloin varmaan ei oo enää asteita vaan vektoreita?
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.
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ä.
Draiz kirjoitti:
CB:lle noita tietoja tarvin
Mihin? CB:ssähän on valmiina ne uuden kohdan laskemiskomennot.
MoveObject (ukko), 2
Vai johonkin muuhunko?
Esimerkiksi TranslateObjectin kanssa tarvii siniä ja kosinia, kehää kiertävän pallon piirtämiseen tarvii siniä ja kosinia, jne.
Jaa. No eivät minun CB-taidot niin suuria vielä ole. Kun hidas nettini Windowsissa tekee erroria, kun yritän ladata. AAAAAAARGH!!!
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).
:)
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 ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.