HTX, RTG Rumlige Figurer Matematik og programmering Vejledere: Jørn Christian Bendtsen og Karl G. Bjarnason Morten Bo Kofoed Nielsen & Michael Jokil 10-10-2011 In this assignment we have been working with 3-dimensional objects. We have used integration and made a smooth transition from one function to another, this was done using math and not at random. In this assignment we have also programmed a program which is able to draw a function and make a 3d figure from it. Furthermore the program is also able to compute the figures volume and draw a picture of the figure
Indholdsfortegnelse Resume... Fejl! Bogmærke er ikke defineret. Mat del... Fejl! Bogmærke er ikke defineret. Programmeringsforløbet... 4 Kerneproblem... 10 Kravspecifikation... 10 Design af brugerfladen... 10 Implementering... 11 Input, operationer og output... 11 Flowchart... 15 Test... 16 Test af program... 16 Diskussion af udviklingsmiljø... 16 Bilag 1 kildekode fra Lazarus... 17 Bilag 2 Kildekode fra Visual Python... 18 Bilag... 19 Side 2 af 19
Side 3 af 19
Side 4 af 19
Side 5 af 19
Side 6 af 19
Side 7 af 19
Side 8 af 19
Side 9 af 19
Programmeringsforløbet I dette forløb har vi beskæftiget os med programmeringen af vores program som tegner en vase i Lazerus ved hjælp af Visual Python. Den komplette kildekode kan ses i bilagene. Kerneproblem Vores kerneproblem i dette projekt er at vi skal have implementeret nogle funktioner med flydende overgang, som vi har programmet i programmeringssproget Python, til at tage imod argumenter fra udviklingsmiljøet Lazarus, og derefter bruge koden i Python til at lave en visuel fremstilling af funktionerne, som skal drejes 360 grader om x-aksen. Derudover skal programmet også kunne udregne volumen af den fremstillede figur. Kravspecifikation Der er opstillet følgende krav til programmet: - Brugerfladen skal udvikles i Lazarus. - Programmet skal kunne variere en eller flere parametre og vise det beregnede volumen. - Programmet skal kunne visualisere figuren i 3D og et længdesnit i 2D. Derudover har vi også opsat nogle krav selv, som vores program også skal opfylde: - Brugerfladen, som fremstilles i Lazarus skal kunne importere informationer og billeder direkte fra VPython. - Alle beregninger og fremstillinger af funktioner skal foregå i VPython og derefter eksporteres til Lazarus. Design af brugerfladen Til design har vi valgt et enkelt, brugernemt design med en enkelt knap, to skrivebokse, to labels, og en billedboks. Programmet fungerer sådan at man indtaster en konstant. Så trykker man på knappen Beregn volumen ud fra radius. Denne knap igangsætter så at konstanten bliver adderet til funktionens radius, hvorefter programmet tegner funktionen drejet 360 grader om x-aksen og derefter udregner volumen af figuren, og skriver det i boksen Volumen. Side 10 af 19
Implementering I denne del af opgaven beskriver vi hvordan vi har udviklet vores program og hvordan og hvorledes de forskellige dele af programmet fungerer og hænger sammen. Input, operationer og output Input I programmet har vi tre vigtige grupperinger, som er vigtige at forstå. Det omhandler input, operationer, og output. Input er de data som brugeren af programmet sender til programmet, i dette program foregår dette ved hjælp af tal som indtastes i boksen Konstant. Det brugeren så indtaster i boksen Konstant, sender Lazarus så videre til Visual Python i form af argumenter. Grunden til denne brug af argumenter er fordi at vi skal have vores brugerflade (Lazarus), og vores udregne- og tegneprogram (Visual Python), til at arbejde sammen. Så det der sker, er at vi skal have Python til at modtage argumenter fra Lazarus. Det har vi gjort ved hjælp af følgende kommando: Hvilket gør at programmet tjekker, da det er en if-statement, om der er to argumenter, og hvis der er, indstiller r til at være lig med argument nummer to. (argument et er altid nul.) Så for at sende argumenter ved hjælp af Lazarus har vi brugt kommandoen: Som gør det, at den indsætter inputtet fra edit1.text som argument i Python. (edit1.text, er boksen hvor brugeren indtaster en konstant.) Side 11 af 19
Operationer Operationerne er den del af programmet som behandler input, og sørger for at der bliver fremstillet et output. I vores program består operationerne af forskellige fragmenter. Hovedparten består dog af de fire følgende: - Tegning af funktionen - Skabelsen af en 3d figur ud fra funktionen - Gem billedet af figuren Disse funktioner er det som vores program skal kunne, og derfor er det dem der hovedparten af vores program. Tegning af Funktionen I denne operation beskæftiger vi os med denne del af koden i vores program: Hvis man er opmærksom lægger man mærke til at koden som jeg har omkranset, er den kode hvor at Python-delen af vores program modtager argumenter fra Lazarus. Det første der sker i denne del af koden er at vi definerer 5 variabler som vi skal bruge senere. Herefter kommer if-statement en, som tager mod argumenter fra Lazarus. Hvorefter der kommer et while-loop, som kører vores første funktion så længe x ligger i intervallet fra x til ca. 1,5, vores anden funktion så længe at x ligger i intervallet fra ca. 1,5 til ca. 2,4, og vores sidste funktion indtil x lid med 4. Side 12 af 19
Skabelsen af en 3d figur ud fra funktionen I denne operation beskæftiger vi os med denne del af koden i vores program: Først vil vi gerne have punkterne på vores kurve til at blive drejet 360 grader om x-aksen. Så har vi gjort det at vi får vores figur til at skifte farve jo længere hen af x-aksen den bevæger sig. Herefter bruger vi igen et loop til at lave cirkler ud fra funktionsværdierne adderet med den konstant brugeren af programmet indtaster. Gem billedet af figuren I denne operation beskæftiger vi os med denne del af koden i vores program: Her bruger vi funktionen imagegrab, som basis tager et screenshot fra koordinaterne (6,30) til (1000,1000). Hvor punktet (0,0) er øverst-venstre i skærmen. Derefter bruger vi im.save, til at gemme billedet. Side 13 af 19
Output Output er de færdige, behandlede data, som bliver præsenteret for brugeren. Man kan sige at outputtet er resultatet af programmet. Herunder ses outputtet af vores program. Side 14 af 19
Flowchart I understående flowchart kan man se hvordan programmet fungere, både med hensyn til input, operationer og output. Side 15 af 19
Test I denne del af opgaven tester vi programmet og dets funktionalitet. Endvidere kommer vi til at diskutere ting som udviklingsmiljø, nogle af de statements der er blevet brugt, og til sidst nogle af de eksterne funktionsbiblioteker vi har brugt under udviklingen af vores program. Test af program Ved testen startede vi programmet op, hvorefter vi indtastede en konstant. Programmet virkede som det skulle. Det fremstillede et billede af figuren og udregnede volumen. Diskussion af udviklingsmiljø Til vores udviklingsmiljø har vi valgt at bruge Visual Python. Dette er fordi at vi mener at det er det der passer bedst til vores opgave med at skulle fremstille en 3d figur af en vase. Herudover har vi også valgt Visual Python da det er det vi mener at vi behersker bedst og kan fremstille det bedste program med. Hvis man kigger på for eksempel Pov-Ray, i forhold til vpython er Pov-Ray lavet til at lave billeder, dog kun 2d i den forstand at man ikke kan dreje på scenen og se tingene fra andre vinkler. Her er vpython mere fleksibel, og vi mener at det er nemmere at manipulere med vores figur. Side 16 af 19
Bilag 1 kildekode fra Lazarus Side 17 af 19
Bilag 2 Kildekode fra Visual Python Side 18 af 19
Bilag Side 19 af 19