1 / 15

Det skrå kast - dokumentation

Det skrå kast - dokumentation. Creating lines. Disse to stykker af kildekoden tegner de horizontale og vertikale linjer og er altså en del af brugergrænsefladen. Creating axis labels.

Download Presentation

Det skrå kast - dokumentation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Det skrå kast - dokumentation

  2. Creating lines Disse to stykker af kildekoden tegner de horizontale og vertikale linjer og er altså en del af brugergrænsefladen

  3. Creating axis labels Ovenstående kode tegner teksten teksten til de horizontale og vertikale streger og er ligeledes en del af brugergrænsefladen

  4. Draw graph Ændres y1-=.5 til y1+=.5 vil grafens få en negativ hældning i stedet for en positiv, og altså gå nedad. Ved at ændre y1-=.5 til y1-=2 vil hældningen blive 4 gange så stejl I programvinduet er koordinatsættet (0,0) ikke i nederste venstre hjørne som i et traditionelt koordinatsystem, men derimod i øverste venstre hjørne, og y-aksen er omvendt af normalt, dvs. y-værdien stiger når man går nedad og falder når man går opad. X-aksen er stadig den samme, altså stiger når man går mod højre og falder mod venstre. #--5.Draw Graph-- delen tilhører både logik- og brugergrænseflade-laget. Funktionen w.create_line() er en del af brugergrænsefladen, da den tegner stregen der bliver vist på skærmen. Den resterende del er del af logik-laget. Her ændres der på de variabler der skal bruges til at tegne grafen.

  5. Converting movement into position vx += 0.5 vy += 0.5 vx += 0 vy += -1 vx += -1 vy += 0.5 #--6.Converting movement into position-- delen tilhører datalaget. Der beregnes og gemmes nye værdier til x1, y1 og vy.

  6. Gravity For at den røde linje skal se ud som om den påvirkes af tyngdekraften, skal værdien der lægges til vy være positiv. Hvis vi tilføjer eller trækker fra vx vil x-retningen også være påvirket af en acceleration, men denne har ikke noget med tyngdekraften at gøre. På billedet herunder regnes først de nye positionsvariabler ud i #--6 ved hjælp af hastighedsvektorerne. Herefter regnes de nye hastighedsvektorer ud i #--7. Hvis vi byttede om på rækkefølgen af disse to udregninger ville positionsvariablerne altså få nogle andre værdier. Grunden til at vx+= og vy+= programmeres under #--7.Gravity-- og ikke under #--5.Draw graf-- har at gøre med rækkefølgen af de forskellige udregninger.

  7. Collision with floor Hvor meget præcisionen skal øges for at stregen ikke går igennem afhænger af hvor høj starthastigheden er, da denne også er med til at bestemme hvor store skridt der tages. Fx hvis vy = -10fra start vil den være +10 når den når ned til gulvet igen. Vil vi finde den præcision hvor der højest rykkes 1 pixel nedad ad gangen ved vy = 10 kan vi opstille en lille ligning: 10 * x = 1, hvor x er præcisionen. Dette giver en præcision på 0,1 som vi også har valgt at bruge i vores program Med en præcision på 0.5 vil stregen altså rykke sig med 10 * 0.5 = 5 pixels nedad på skærmen. Dette er synligt under gulvstregen og altså ikke præcist nok til programmets formål.

  8. Collision with floor Øger vi præcisionen ved at gøre trinene mindre, betyder det også at simulatoren skal køre længere tid for at beregne og afbillede samme kast. Vores timeMax variabel der bestemmer hvor mange gange vi kører vores sumulation loop skal altså forøges. Som standard er vores timeMax = 3000. Øger vi præcisionen 10 gange, fx fra 0.1 til 0.01 vil vores simulation loop altså skulle køre 30000 gange i stedet, medmindre vi ikke også ændrer vores timeMax, i hvilket tilfælde grafen blot ikke tegnes færdigt, som vist nederst til højre. Præcision på 0.1 og timeMax = 3000 Præcision på 0.01 og timeMax = 3000

  9. Collision with wall #--9.Collision with wall-- hører mest til datalaget, da denne del af programmet har med beregning af hastighedsvektorenes nye værdi at gøre.

  10. Air resistance #--10.Air resistance-- delen har med datalaget at gøre. Denne del af programmet ligger tæt på computeren, da den har at gøre med udregning af forskellige variablers værdier at gøre.

  11. Sammenligning med fysikresultater Vores starthastighed målte vi til 5.892. Der ikke er nogen tydelig logisk sammenhæng mellem vinkel og længde i vores resultater, og vores simulator vil derfor ikke komme til at passe lige godt til alle vinkler. Som man kan se på billedet skyder programmet for kort ved 20°, mens der skydes for langt ved nogle af de større vinkler. Det er dog relativt tæt på. For at tilpasse programmet har vi ændret på påvirkningen fra tyngdekraften og vindmodstanden.

  12. Omskrivning af program til funktion I korte træk har vi blot defineret funktionen fire_canon() i starten af koden, lige at have importeret math og Tkinter. Som parametre for denne funktion har vi sat variablerne angle og velocity. Vi brugte også disse to variabler tidligere, men da vi har dem som parametre i funktionen nu, skal vi ikke erklære dem igen. Herefter har vi bare rykket hele koden en tak ind, for at høre under fire_canon() funktionen. Resten af koden er stort set uændret.

  13. Tilføjelse af en brugerflade ved hjælp af Tkinter En af de væsentligste ting ved tilføjelsen af vores brugerflade, er at grafen først skal tegnes når der klikkes på ‘go’-knappen. Til dette har vi defineret en ny funktion msetvar() som vi flyttede alle udregninger samt tegningen af selve grafen ind under. Vi satte så ‘go’-knappen til at kalde denne funktion. Vi fik så programmet til at bruge de indtastede værdier i felterne som variabler for vinkel og starthastighed. Flere detaljer samt screenshots på de næste par sider.

  14. Tilføjelse af en brugerflade ved hjælp af Tkinter ment_angle og ment_velocity er begge string variabler til at gemme det der skrives i de to felter. mlabel_angle og mlabel_velocity er bare tekst. De to inputfelter laves med mentry_angle og mentry_velocity. Delen gemmer hvad der skrives i tekstfelterne i variablerne ment_angle og ment_velocity.

  15. Tilføjelse af en brugerflade ved hjælp af Tkinter Linjen angle = float(ment_angle.get()) virker på følgende måde: Først hentes værdien gemt i ment_angle ved get() funktionen. Herefter laves den om til en float værdi, som til sidst gemmes i angle variablen. Resten af programmet er der ikke ændret ved.

More Related