Kan nogen forklare mig hvad cosinus og sinus er?

Tags:    programmering

<< < 12 > >>
Jeg er i gang med at lave et computerspil i et program der hedder Game Maker ...
Men der er det problem, at jeg skal bruge en funktion, som jeg ikke selv kunne regne ud, så jeg fandt den på en tutorial på nettet.
Problemet er, at jeg helst ikk bare vil kopiere koden, uden at forstå den.
xx = target.x+target.speed*dist*cos(target.direction*pi/180);
yy = target.y-target.speed*dist*sin(target.direction*pi/180);

sin() og cos() er funktioner der retunerer værdien i () til et sinussen eller cosinnussen af tallet (regnestykket el variablen)
Min far siger at man først lærer om det på gymnasiet, og da jeg kun skal til at i gå i ottende, så vil jeg sku ikke vente på det.

Så vil nogen forklare mig hvad sinus og cosinus er, på en måde jeg kan forstå, for jeg fatter ikke det på wikipedia..?



13 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 25 karma
Sorter efter stemmer Sorter efter dato
Well some andre siger så er det ikke et lille emne - dog har jeg aldrig syntes at det er svært at forstå hvad det er - men mere hvordan det bruges.

http://img41.imageshack.us/img41/9464/sincos.gif

Det er et meget hurtigt billede jeg smed sammen - cirklen i ovenstående billede skal tages for at have en radius på 1 - dvs fra midt til periferien på cirklen er der 1 (du skal ikke tænke på om det så er cm, mm, eller hvad enheder du nu regner i - der er bare 1 du kan så tilføje hvilken enhed du lyster).

Hvis du så tegner en streg fra cirklens centrum til periferien (kanten) på cirklen og måler dens vinkel - og herefter tegner en streg lodret til x aksen og en vandret til y aksen og måler disse. Noter dette.

Prøv så nu at bruge sinus og cosinus funktionen på din lomme regner og udregn sinus og cosinus til vinklen som du målte - hvis du har gjort det rigtigt skulle det meget gerne give det samme.

PS. At måle på noget med f.eks. en radius på 1 centimeter kan blive meget besværligt - måden du kommer uden om dette på er meget simpelt. Bestem dig for at f.eks. 10cm nu er det samme som "1". Når du så regner sinus og cosinus ud så gang disse resultater igennem med 10. (Bemærk dette virker selvfølgelig kun hvis du også noterer dine resultater i cm).

En anden ting er - at matematikkere er rigtig glade for at måle vinkler i noget andet end grader. Prøv først at udregne sinus til 90 - hvis dette ikke giver 1 så skal du se om din lommeregner kan indstilles til at regne i grader i stedet for radianer. Hvis du ikke kan finde en sådan en indstilling så skal du regne dine grader om til radianer som højst sandsynligt er det din lommeregner forventer, det kan du gøre på følgende måde:

Fold kodeboks ind/udKode 


Hvor PI selvfølgelig er konstanten PI som ofte bliver brugt i cirkel beregninger som har en værdi tæt på 3,14.

Håber det kan hjælpe, hvis ikke så kan det være du bliver nødt til at vente lidt indtil du kommer videre i skolen - held og lykke.



Jeg stod lidt i samme situation som dig, nemlig at man ikke lærte det før gymnasie niveau. Men det er muligt at lære uden. Og som et plus så gav det mig et 13 tal i 9-klasses prøverne i matematik.

Der er ikke svært at forklare hvad sinus og cosinus er, det svære er at forklare hvordan og hvorfor du kan bruge det.

Kan ikke huske hvornår man lærer det, men følgende ting skal du vide før du kan forstå de trigonometriske funktioner:

Retvinklet trekant - (en af vinklerne er 90 grader)
Hypotenuse - (den længste side i en retvinklet trekant.
Katete - (der er to af dem i en retvinklet trekant. - De er de to sider som ikke er hypotenusen.

Det hjælper nok at tegne dette på papir. Lad os sige du har en trekant.
Vinkel A er 30 grader.

Vinkel C, er 90 grader, og er til højre for Vinkel A. Og Vinkel B er ovenover Vinkel C.

Her er Sinus for vinkel A simpelthen længden af den overfor-liggende side (a, eller CB) / med hypotenusen (den lange, AB). Dette giver et tal mellem 0 og 1. Og det er simpelthen Sinus.

Cosinus for vinklen A er længden af den hosliggende (den ene af siderne der former vinklen og ikke er hypotenusen, dvs. AC) / med hypotenusen (AB). Dette giver også et tal mellem 1 og 0.

Hvad kan du så bruge det til? Jo internt i spil bruger du ofte x og y koordinater til at holde styr på hvor ting er. Men hvis de nu har en retning og en hastighed er det ikke så nemt. Her er det sin og cos kommer ind.

Lads os sige du har en "tank" i position A ligesom ovenover. Dens direction er 30. (GameMaker følger enhedscirklen så ikke noget problem). Så A er 30grader ligesom jeg skrev ovenover. Hypotenusen gør vi så lig dens hastighed. Så hvis dens hastighed er 4 er længden af hypotenusen 4. Hvis vi forestiller os at du har ternet papir f.eks. og du sætter A der hvor linier skærer og gør den til 30 grader. Og laver hypotenusen 4 lang. Og lav B også. Her vil linierne på papiret være ligesom en lineal for x og y koordinater. den linie hypotenusen former er den position "tanken" skal være i næste "step". Men som sagt så bruger tanken jo x og y koordinater til at gemme dens position. Kig her på CB. Dens længde passer jo med den højde der skal til for at få tanken "op" i dens nye position. Og kig på AC. Dette ligner den vandrette afstand, x-afstanden som skal til at få den der. Men man behøver ikke kende hypotenusen og CB for at finde sinus til vinkel A. Dette kan gøre rent matematisk. Og der findes typisk en funktion kaldet sin(vinkel). Dette er hvad man kan bruge Sinus og Cosinus til.

Lad os tage vores eksempel igen.
Vinkel A 30 grader, (dette er lig med tankens "direction" GM)
Vinkel C 90 grader og er til højre for vinkel A, fordi vinkel A er 30 grader.
Vinek B som er 60 grader på grund af A+B+C=180, samt ovenover C.
Hypotenusen er lig med hastighed ("speed" i GM), her 4.

Husk vi står i A. Og vi ved hvor hurtigt vi kører (hypotenusen). For at finde hvor meget vores x-position skal ændre sig, finder vi længden af AC/hypotenusen * hypotenusen. Siden AC/hypotenusen er lig med Cos(A) bliver det blot: Cos(A)*hypotenusen = 0.866 * 4 = 3.46

Det vil sige at hvis tanken bevæger sig med hastighed 4 i 30grader bliver det dens x koordinat den skal flytte sig med 3.46. (typisk er det dog ikke muligt at flytte en halv pixel i GM. Men det er der måder at løse på)

Det var hvor meget x-koordinat den skulle flytte sig. Hvad med y?

BC/hypotenusen * hypotenusen = sin(A) * hypotenusen = 0.5 * 4 = 2

Så der er det. Hvis du vil flytte tanken med hastighed 4, og 30 grader (i GM/på enhedscirklen), skal den flyttes 3.46 vandret og 2 lodret. Her (i GM skal det dog være -2 lodret, fordi der er større y punkt længere nede, i modsat til et normalt koordinatsystem.)

Hvis der er noget du vil have forklaret bedre så skriv.

Årsagen til at du ganger med pi og dividerer med 180 er fordi at funktioner i GM og "næsten alle" andre steder regner i radianer ligesom Kaare siger ovenover. (lidt ligesom kg vs. pund).






Indlæg senest redigeret d. 29.07.2009 11:22 af Bruger #14645
Hej Johan,

Puha det er et stort spørgsmål du har stillet. Kan fortælle dig at man bruger rigtigt lang tid på det i bl.a. matematisk gymnasie, HTX osv. Tror faktisk stort set det er et helt skoleår.

Hvis du har set et Ossiloskop før, vil du se en linje som bølger op og ned. Det kalder man en sinus kurve.

Sin tager udgangspunkt i en 'enhedscirkel', som er en cirkel med radius på 1 enhed, og med centrum i (0,0). I højre side af cirklen tegner du en tangent akse med samme dimensioner som cirklen, altså cirklens top punkt vil på aksen have værdien 1.

Hvis du så skal finde Sin til 14 f.eks. så tager du og tegner en streg fra punkt 14 på din tangent, og til centrum af cirklen. Herefter målet du vinklen på det, og det vil så være resultatet.

Som sagt, så er det et ufatteligt stort emne, og der er nok ikke nogen vej uden om noget skole eller matematik bøger hvis du vil forstå det helt. Det er en kæmpe ting, og ligger grundlag for ufatteligt mange ting i trigometriens verden, bl.a. også trekanter mv. som Robert fint forklarede. Det er desværre for lang tid siden at jeg gik på HTX så kan ikke huske det ned til mindste detalje.

Håber at eksemplet gav dig lidt indsigt i hvad det er jeg prøver at forklare. Der findes massere af artikler om det på nettet, som Robert os giver. Du kan os læse lidt om det på http://da.wikipedia.org/wiki/Sinus_(matematik)



Sinus og cosinus er en del af trigonometrien.

I en retvinklet trekant er sinus af en vinkel forholdet mellem den modstående katete og hypotenusen.
Cosinus af en vinkel er forholdet mellem den hosliggende katete og hypotenusen.

Det vil tage lang tid at forklare, hvad det så kan bruges til, men prøv at læse denne pdf: http://www.kennethhansen.net/MatMyst/2-Trigonometri.pdf

Det er meget anvendelige funktioner, så bare klø på :-)



Indlæg senest redigeret d. 29.07.2009 09:03 af Bruger #2695
Rigtig godt at du forstår hvad funktionerne gør nu - det er første skridt på vejen til at lære en hel masse om hvad man rent faktisk kan med at regne med trekanter så længe man har et par kendte variabler (længder og/eller grader).


Sinus og cosinus er skam ikke kun til trekanter. De kan bruges til alt muligt der har med vinkler at gøre, f.eks. cirkler, spiraler og kurver: http://en.wikipedia.org/wiki/List_of_curves



Java bruger by the way også radianer, mens C/C++ bruger grader.


Hvilket C++ bibliotek tænker du på?

http://www.cplusplus.com/reference/clibrary/cmath/sin/



Java bruger by the way også radianer, mens C/C++ bruger grader.


Hvilket C++ bibliotek tænker du på?

http://www.cplusplus.com/reference/clibrary/cmath/sin/


wtf?

Ok, der tog jeg vist lidt fejl :$



Well some andre siger så er det ikke et lille emne - dog har jeg aldrig syntes at det er svært at forstå hvad det er - men mere hvordan det bruges.

http://img41.imageshack.us/img41/9464/sincos.gif

Det er et meget hurtigt billede jeg smed sammen - cirklen i ovenstående billede skal tages for at have en radius på 1 - dvs fra midt til periferien på cirklen er der 1 (du skal ikke tænke på om det så er cm, mm, eller hvad enheder du nu regner i - der er bare 1 du kan så tilføje hvilken enhed du lyster).

Hvis du så tegner en streg fra cirklens centrum til periferien (kanten) på cirklen og måler dens vinkel - og herefter tegner en streg lodret til x aksen og en vandret til y aksen og måler disse. Noter dette.

Prøv så nu at bruge sinus og cosinus funktionen på din lomme regner og udregn sinus og cosinus til vinklen som du målte - hvis du har gjort det rigtigt skulle det meget gerne give det samme.

PS. At måle på noget med f.eks. en radius på 1 centimeter kan blive meget besværligt - måden du kommer uden om dette på er meget simpelt. Bestem dig for at f.eks. 10cm nu er det samme som "1". Når du så regner sinus og cosinus ud så gang disse resultater igennem med 10. (Bemærk dette virker selvfølgelig kun hvis du også noterer dine resultater i cm).

En anden ting er - at matematikkere er rigtig glade for at måle vinkler i noget andet end grader. Prøv først at udregne sinus til 90 - hvis dette ikke giver 1 så skal du se om din lommeregner kan indstilles til at regne i grader i stedet for radianer. Hvis du ikke kan finde en sådan en indstilling så skal du regne dine grader om til radianer som højst sandsynligt er det din lommeregner forventer, det kan du gøre på følgende måde:

Fold kodeboks ind/udKode 


Hvor PI selvfølgelig er konstanten PI som ofte bliver brugt i cirkel beregninger som har en værdi tæt på 3,14.

Håber det kan hjælpe, hvis ikke så kan det være du bliver nødt til at vente lidt indtil du kommer videre i skolen - held og lykke.


Tak for det! du var den første af jer tre der forklarede det her på dansk som jeg kunne forstå...

...

Nu har jeg lige leget med det på min lommeregner, og jeg forstår det sku! På trods af at ham den anden sagde det tog et år...



Kaare mente nok følgende i stedet:

Fold kodeboks ind/udKode 


En hel omgang er 360 grader eller 2*PI radianer.

Java bruger by the way også radianer, mens C/C++ bruger grader.


Ja det lagde jeg også mærke til, det stod også i det script jeg skrev i den første




Nu har jeg lige leget med det på min lommeregner, og jeg forstår det sku! På trods af at ham den anden sagde det tog et år...


Skidegodt :)

Men det er så nok hele emnet som tager et år...cosinus reglen, sinus reglen, tangens, påvirkning af vektorer og så videre. Trigonometri er et stort emne, men MEGET anvendeligt, så det er godt, at du har fået interessen.



<< < 12 > >>
t