HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012
Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering... 5 Produktudvikling... 5 1. Iteration... 5 2. Iteration... 9 3. Iteration... 10 Videreudvikling... 12 Konklusion... 12 Bilag 1... 13 Af Michael Jokil Klasse 3.4 Side 2 af 14
Indledning I dette projekt vil jeg prøve at udvikle et program som skal hjælpe fysik elever på HTX med at forstå et forsøg som hedder "Det skrå kast". Grunden til at jeg har valgt dette er fordi at jeg har talt med mange, som synes at det er et svært forsøg, og synes at det godt kunne have være, både bedre forklaret og bedre illustreret. Denne problemstilling har jeg så efterfølgende undersøgt med hensyn til hvordan jeg kunne fremstille løsningsforslag, som ville kunne hjælpe elever som har problemer med forsøget. Ud fra dette har jeg så fundet frem til at jeg kan lave et program i Python, som ved hjælp af dets indbyggede bibliotek "Tkinter" kan illustrere "Det skrå kast". Teori I dette projekt vil jeg gøre brug af udviklingsmiljøet og programmeringssproget "Visual Python" som jeg skal bruge til at skrive den kode som opgør programmet, samt flere af dets biblioteker som jeg skal bruge under udviklingen af programmet. Til udviklingen af selve brugerfladen bruger jeg "Tkinter" som er et "bibliotek" i Python. Biblioteker i programmeringssprog er et udtryk for en samling af kode skrevet i det gældende sprog som definere en eller flere funktioner som gør det nemmere for brugeren at bruge sproget, ved for eksempel at skrive en kode som gør det muligt at sætte noget i x'ne, med hensyn til matematik. Når man bruger koordinaterne til et vindue i Tkinter skal man huske på at punktet (0,0) befinder sig øverst i venstre side af vinduet og x bevæger sig til højre når det bliver større, mens y bevæger sig nedad når den bliver større, og ikke op som i et normalt koordinatsystem. Af Michael Jokil Klasse 3.4 Side 3 af 14
Kravspecifikationer I dette afsnit vil jeg definere de overordnede krav som jeg gerne vil have programmet skal overholde før at mener at det virker. De overordnede krav som jeg gerne vil have at programmet skal overholde er som følgende: 1. Programmet skal yde et visuelt hjælpemiddel til at forstå hvad "Et skråt kast" er 2. Programmet skal være nemt at bruge 3. "Det skrå kast" skal være opstillet på en nem og overskuelig måde Disse krav er stillet på baggrund af nogle af de "user stories" som jeg har indsamlet under min indledende problemfase. Design Funktionalitet Programmet skal fungere således at der skal være af afsnit i koden som handler om at fremstille et koordinatsystem, et afsnit som handler om Tkinter og et afsnit som handler om selve simuleringen af forsøget. Brugerflade Brugerfladen er designet således at den består af et enkelt vindue som viser første kvadrant af et koordinat system som fylder hele vinduet undtagen bunden, hvor de knapper man kan trykke på, befinder sig. Af Michael Jokil Klasse 3.4 Side 4 af 14
Implementering Produktudvikling 1. Iteration Hvad skal der i 1. prototype Min plan for den første prototype er at jeg gerne vil have at programmet skal kunne tegne et koordinatsystem og en simpel funktion som for eksempel x = y. Krav for 1. prototype Skal kunne tegne et koordinat system Skal kunne tegne en simpel funktion Gennemgang af 1. prototype I gennemgang af prototype 1 vil jeg komme ind på importering af biblioteker, definering af variabler, brugerfladen med hensyn til Tkinter og simuleringen af en simpel funktion. importering af biblioteker Til denne prototype har jeg brugt biblioteket Tkinter, og biblioteket "math" som er det bibliotek hvor mange matematiske formler og udtryk er defineret. Definering af variabler Til brug i 1. prototype har jeg defineret følgende variabler, som ses på billedet herunder: "Tidslut" definerer en variabel som jeg skal bruge til at fortælle programmet hvornår det skal stoppe med at tegne funktionen, som kommer til at være "Det skrå kast". Af Michael Jokil Klasse 3.4 Side 5 af 14
x1, y1 er xy-koordinatenerne til det punkt hvor funktionen skal begynde. "Hastighedx" er den hastighed grafen skal bevæge sig hen ad x-aksen for hvert interval. "Hastighedy" er den hastighed grafen skal bevæge sig op ad y-aksen for hvert interval. x2 = x1, og y2 = y1, sætter henholdsvis x- og y-koordinatenerne for punkt 1 lig med et nyt punkt, punkt 2. Brugerflade med Tkinter Det er så her i programmet hvor vinduet hvori det visuelle design kommer til at ligge i. Koden nedenfor bruges til at oprette et vindue, eller "canvas" mede højden 480 og bredden 640, og fylde det med hvid farve. (#ffffff, er hexidecimal kode for hvid) Udvikling af koordinatsystemet Til udviklingen af koordinatsystemet for x-aksen har jeg brugt følgende kode: Den gør brug af kommandoen "w.create_line(x1,y1,x2,y2)" som er en kommando, der fortæller Tkinter at nu skal den oprette en linie fra punktet (x1,y1) til punktet (x2,y2), (to vilkårlige punkter, som ikke skal forveksles med variablerne x1, y1, x2 og y2), og kommandoen "fill" fortæller så programmet hvad farve den linie skal være, igen i hexidecimal. Her tegner jeg så en sort x-akse, og derefter et gitter af nye grå linier i intervaller på 100 pixel. Derefter gør jeg det samme for y-aksen, tegner en sort y-akse og derefter grå linier hver 100 pixel. Af Michael Jokil Klasse 3.4 Side 6 af 14
Så vil jeg også gerne have, at der bliver vist nogle enheder på akserne. Dette gør jeg ved hjælp af følgende: Her bruger jeg så, i stedet for kommandoen "w.create_line()", w.create_text(x,y,text=""), som skriver teksten som fremgår mellem apostroferne og i punktet (x,y). Derefter får jeg dette billede: Af Michael Jokil Klasse 3.4 Side 7 af 14
Simuleringen Til at simulere en enkelt funktion har jeg brugt koden: Det denne kode gør er at den laver et loop der bliver ved med at køre så længe dets betingelser er opfyldt, i dette tilfælde så længe "tidstart" er mindre end "tidslut". Derudover ligger loopet så 1 til "tidstart" for hver iteration. For så at tegne grafen ligges der 1 til x, og -1 til y for hver iteration, og derefter laver kommandoen "w.create_line()" en linje mellem (x1,y1) som nu er henholdsvis 1 og -1 større og (x2,y2) som er lig det (x1,y1) var før der blev lagt noget til. Herefter bliver x2 sat lig med x1 og y2 lig med y1, og loopet startes forfra, indtil betingelserne for loopet ikke længere bliver opfyldt. Test Her i testen for prototype 1 skulle jeg over holde disse to krav: Skal kunne tegne et koordinat system Skal kunne tegne en simpel funktion Under test får jeg dette billede: Af Michael Jokil Klasse 3.4 Side 8 af 14
Hvilket tydeligt viser at der både bliver tegnet et koordinatsystem og funktionen x = y som er en den simple funktion, som jeg har valgt at bruge. 2. Iteration Hvad skal der i 2. prototype I anden prototype vil jeg gerne have fremstillet det såkaldte "Skrå kast" i programmets koordinatsystem. Krav for 2. prototype Skal kunne tegne et koordinat system Skal kunne tegne "Det skrå kast" Gennemgang af 2. prototype I denne, og følgende prototyper vil jeg nøjes med at gennemgå det som er nyt fra sidst. Som man kan se er der nu blevet indført to ekstra ting til funktionen som opgør "Det skrå kast". Der er nu sat en hastighedsberegner ind, som gør at for hver iteration af loopet reduceres hastigheden en lille smule. Derudover er der også sat tyngdekraft på, sådan at der er en kraft som "trykker ned" på funktionen for hver iteration. Test Her i testen for prototype 2 skulle jeg over holde disse to krav: Skal kunne tegne et koordinat system Skal kunne tegne "Det skrå kast" Af Michael Jokil Klasse 3.4 Side 9 af 14
Under test får jeg dette billede: Her kan man tydeligt se at der stadig bliver tegnet et koordinatsystem og at der nu også bliver tegnet "Det skrå kast". 3. Iteration Hvad skal der i 3. prototype I tredie prototype skal jeg have sat alle de små beregninger ind i en funktion som jeg definerer, derudover skal jeg have lavet kollision med x-aksen således at den affyrede "bold hopper" på x- aksen. Endvidere skal jeg have lavet en knap som starter "Det skrå kast" i den visuelle brugerflade. Krav for 3. prototype Skal kunne tegne et koordinat system Skal kunne tegne "Det skrå kast" "Det skrå kast" skal kollidere med x-aksen De små beregninger i programmet skal sættes sammen og defineres i en funktion Der skal laves en knap til at starte "Det skrå kast" Gennemgang af 3. prototype I denne prototype har jeg fået alle de små beregninger, inklusiv den nye, som beregner kollisionen med x-aksen defineret i en funktion jeg har kaldt "kast". Dette kan ses i bilag 1, hvor hele kildekoden til programmet kan findes. Den nye beregning ser således ud. Af Michael Jokil Klasse 3.4 Side 10 af 14
og gør det at så længe y1-koordinaten er større end 430, som er der hvor x-aksen befinder sig, og så længe at hastigheden er større end nul, så skal hastigheden for y reduceres med en faktor på 0,6 og inventeres da det er -0,6 der bliver multipliceret med. Derudover har jeg også lavet en knap som kalder funktionen "kast". Den ser således ud: Det den gør er, at den opretter en knap, som er førdefineret i Tkinter, sætter den til at hedde "Start" og giver kommandoen "kast", som er funktionen, hvis der bliver trykket på den. Test Her i testen for prototype 3 skulle jeg over holde disse to krav: Skal kunne tegne et koordinat system Skal kunne tegne "Det skrå kast" "Det skrå kast" skal kollidere med x-aksen De små beregninger i programmet skal sættes sammen og defineres i en funktion Der skal laves en knap til at starte "Det skrå kast" Under test får jeg først dette billede: Her kan man tydeligt se at der stadig bliver tegnet et koordinatsystem, og nu også en "Start" knap. Af Michael Jokil Klasse 3.4 Side 11 af 14
Hvis jeg trykker på "Start" sker følgende: Den tegner nu igen "Det skrå kast", denne gang også med kollision med x-aksen, og hvis man kigger i program koden i bilag 1 kan med se alle de små beregninger er sat ind i funktionen "kast". Videreudvikling Eventuelle videreudviklinger af programmet skal gå med at indsætte knapper i brugerfladen med tilhørende kode i programmet, som fungerer således at det giver brugeren af programmet mulighed for selv at vælge udgangsvinkel på kastet, og den hastighed hvormed "bolden" affyres. Herudover kunne man også lave luftmodstand, som for eksempel kunne bruges til at simulere vind. Konklusion Programmet hjælper måske ikke helt så meget endnu som jeg havde håbet på det ville. Jeg ville gerne have nået at gøre således at programmet kunne modtage input fra brugeren, i form af affyringsvinkel og hastighed, og derefter lave "Det skrå kast" ud fra det. Dog synes jeg stadig at programmet har opfyldt de hovedkrav som jeg har sat, i hvilke jeg definerede at det vigtigste var at programmet kunne give at visuelt billede af, hvad "Det skrå kast" rent faktisk går ud på. Af Michael Jokil Klasse 3.4 Side 12 af 14
Bilag 1 Af Michael Jokil Klasse 3.4 Side 13 af 14
Af Michael Jokil Klasse 3.4 Side 14 af 14