Programmering Læring om Cos(x) og Sin(x) Andreas Møinichen og Aske Märcher 10-05-2011 LÆRER: KARL BJARNASON Roskilde Tekniske gymnasium. Klasse 2.1
Indholdsfortegnelse PROJEKTBESKRIVELSE... 3 INDLEDNING... 3 PROBLEMANALYSE... 3 PROBLEMFORMULERING... 3 MÅLGRUPPE... 4 LØSNINGSFORSLAG... 4 KRAV TIL VORES 1ST PRODUKT... 5 1ST UDGAVE AF PROGRAMMET... 6 TEST 1.... 8 2ND UDGAVE KRAV OG TEST... 8 2ND UDGAVE AF PROGRAMMET... 9 KONKLUSION... 11 2
Projektbeskrivelse Indledning Vi er 2 elever fra Roskilde Tekniske Gymnasium 2.g, som nu er ved at være ved ende så vi skal lave et eksamens projekt i faget Programmering C. Vi har fået frie rammer til at lave hvad vi har lyst til så længe det har noget med faget og gøre og det løser en problemstilig som vi selv har sat op. Vi har valgt at vi vil lave et program i VPython som skal løse et problem. Problemanalyse Da vi startede på HTX og begyndte på matematikken begyndte der hurtigt at komme en masse om Cos(x) og Sin(x) og noget med en eller anden enhedscirkel, og det kan sagtens være meget svært at forstår når man lige kommer fra folkeskole hvor ingen matematik er særlig abstrakt. Vi oplevede begge nogen vanskeligheder med at forstå de her ting og nok mest fordi det ikke var noget man kunne se for sig, alt imens man gik i folkeskole blev alt visualiseret, som kan give en meget større forståelse for nogen. Så vi har tænkt os at lave et program som kan visualisere Cos(x) og Sin(x) på enhedscirkelen og forsøge at gøre dette emne mere enkelt og lettere at overskue da det er helt vildt vigtigt for resten af ens skolegang. Cos(x) og Sin(x) er jo noget af det som man altid kommer til at bruge da det kommer frem overalt i ens matematik. Problemformulering Så vi har altså tænkt os lavet lave et program i VPython som skal visualisere Cos(x) og Sin(x) på enhedscirkelen. 3
Målgruppe Dem målgruppe vi vil ramme i det her projekt er gymnasieelever som har om enhedscirkelen og eller er færdige med emnet, som synes det er svært eller har været haft svært ved det. Men det kan også bruges til bare at lærer om nogle helt grundlæggede ting i matematikkens verden. Løsningsforslag Det er vores grundide til hvordan vores endelig produkt skulle se ud hvor den funktion der går fra 0,0 til enhedscirkelen skal kunne bevæge sig op som kan styres af de knapper der skal være nede i højre side. Der skal også være et interface nede i venstre side som viser hvor mange grader og radien der er fra x-asken til grafen. 4
Krav til vores 1st produkt Når vi laver vores program, har vi nogle krav som det skal opfylde, så vil vi teste den, og forhåbeligvis kunne forbedre programmet. Vi har fremsat følgende krav: - Det skal være let at overskue. - Man skal kunne flytte på vores graf. - Det skal være klart at se at det er en enhedscirkel. De ting vi vil teste: - Kan vi flytte vores graf. - Kan man se at det er en cirkel og et koordinatsystem. - Kan man se det er en enhedscirkel. 5
1st udgave af programmet Det første vi lavede var selve cirklen og koordinat systemet. Sådan her så vores kode ud. Det er bare en ring, med 4 cylinder fra centrum til lidt ud over cirklen. Det kan også ses i vores kode. axis 1.15, og da enhedscirklen altid er 1 i radius, så går den lidt ud over. Vi har også valgt at lave dem i hver sin farve for at man tydeligt kan se forskel, men dog parvist samme farve for at x og y akserne hænger sammen. Sådan kom den til at se ud, efter nogle problemer med en rotate commmand. Heldigvis fandt vi måden at dreje den på. Da vi skulle dreje den en halv omgang er det pi, da computeren regner i radianer. 6
Nu var vi godt i gang men vi mangler en måde hvorpå vi kan bevæge en graf som vi også skal have lavet. Vi har lavet en ny cylinder: Radiusen. Vi har defineret dens længde ud fra axis med sinus og cosinus til v1. Ovenover kan vi se at v1=0. Så vores graf starter med en vinkel på 0. Nu har vi sat en ny command ind også, keyboard interaction med fine ord. Vi har nu gjort at hvis man klikker på up altså pil opad og down, pil nedad, vil v1 blive enten adderet eller subtraheret med 0,1 i radianer. Nu har vi opfyldt alle kravene vi har sat og skal til at teste vores 1st udgave af programmet. 7
Test 1. Ud fra vores første test fik vi feedback der lød således: Det ser let og enkelt ud, det er let at se at det er en cirkel og et koordinatsystem. Det er fedt at man kan flytte rundt på grafen, men for dårligt at de gamle ikke forsvinder efter man har klikket. Ud over det er det ikke helt klart hvad den viser, og at det er enhedscirklen. 2nd udgave krav og test Vi har nogle nye krav og ting vi vil teste næste gang, for at se om det har lykkes os at visuellisere sinus og cosinus så elevere har lettere ved at lære det. Nye krav: - Den forrige blå graf skal forsvinde igen når man trykker op eller ned. - Der skal være små bokse som kan fortælle hvor stor vinklen er i grader og radian, og hvad sinus og cosinus er. Ting vi vil teste den på: - Er det klart hvor man er på enhedscirklen (der er ikke flere blå grafer) - Det er let at se hvad vinklen er og cosinus og sinus værdierne er. 8
2nd udgave af programmet Vi arbejder videre ud fra kravene, og det vi tager fat i først er kasserne som skal være over og under vores enhedscirkel som kan vise hvad vinklen er i radian og grader. Vi skulle arbejde i controls troede vi, og med bokse. Det tog ikke ret lang tid før vi opdagede at det mest oplagte ville være labels. denne label viser et billede af en tekst, i dette tilfælde er den 0, for vi har sat den til at vise v1s værdi. Og det gør den, men lige oven over står den til 0. Nu er det så bare at sætte nogle flere på: Og med en visualisering ser det således ud: 9
Således ser det ud med alle de forskellige labels der er sat på. Det vi så skal have fixet er det med at den blå graf ikke skal replicere sig selv, men flytte sig. Vi prøvede med en rotate command: og det kom til at se således ud: Det der skete ved denne test var vi jo prøvede at får vores graf til at dreje rundt om (0,0) med en rotate command i stedet for den måde vi har gjort det før. Hvor vi gjorde så der hver gang man trykkede op og ned blev der dannet en ny cylinder, hvilket gjorde at vi fik en cylinder for hver 0,1 radien på enhedscirkelen. Da vi havde lavet vores rotate command fik vi så problemet at grafen begyndte at dreje om den rundt om x-asken i stedet for at dreje om z-asken som vi gerne ville have. Når man laver en rotate command bliver rotationen styret af angle. Og til at starte med satte vi vores rotation til v1 men da v1 var 0 begyndte den at dreje den forkerte vej. Der for satte vi vores angle= også begyndte den så at dreje den rigtige vej. Nu er vores eneste problem så at få opdateret de forskellige labels, så de ændre sig i forhold til vores vinkel. 10
Konklusion Vi er ret godt tilfredse med vores, vi er dog lidt kede af ikke at kunne finde en udate command, til at opdatere vores labels undervejs. Det er ret trist da det mindsker forståelsen for folk der skal lære Sinus og Cosinus, når de ikke kan se at det ændre sig. Men heldigvis fik vi lavet en enhedscirkel med en graf der kunne flytte sig når man flyttede dens vinkel med piltasterne. Hvis man kunne fixe labels ne tror vi at det kunne hjælpe en del på personer der er nye til Sinus og Cosinus. Hvis man skulle videre udvikle på produktet kunne man lave det muligt, at indtaste sinus og cosinus data ind i label, hvor efter at den blå cylinder selv vil finde sin plads. Så ville der være mere bruger interaktion. 11