Rumlige figurer. Matematik A og Programmering C - projekt

Relaterede dokumenter
Projektopgave Rumlige figurer. Matematik & Programmering Lars Thomsen Klasse 3.4 HTX Roskilde Vejledere: Jørn & Karl 05/

HTX, RTG. Rumlige Figurer. Matematik og programmering

Visualiseringsprogram

Michael Jokil

Læringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4

Dernæst vil der komme et vindue frem, hvor man kan ændre på x- og y-aksen samt andre indstillinger så som farve og skrift.

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Projektopgave 1. Navn: Jonas Pedersen Klasse: 3.4 Skole: Roskilde Tekniske Gymnasium Dato: 5/ Vejleder: Jørn Christian Bendtsen Fag: Matematik

Matematik A og Informationsteknologi B

1 Indholdsfortegnelse

Pointen med Differentiation

Eksponentielle modeller

Eksponentielle modeller

Af: Safa Sarac Klasse 3.4 Skole: Roskilde Tekniske Gymnasium, HTX Vejleder(e): Karl B Dato: 26. marts 2012

Rumlige figurer. SO-projekt Matematik og Programmering klasse 3.4 Vejledere: Karl og Jørn. Af: Asger, Christian og Kalle

Læringsprogram. Numeriske metoder. Matematik A Programmering C Studieområdet. Roskilde Tekniske Gymnasium Klasse 3.4

Klasse 1.4 Michael Jokil

Værktøjskasse til analytisk Geometri

Andreas Møinichen og Aske Märcher

Afstandsformlen og Cirklens Ligning

Værktøjskasse til analytisk Geometri

Integralregning Infinitesimalregning

Vi har valgt at analysere vores gruppe ud fra belbins 9 grupperoller, vi har følgende roller

Afstande, skæringer og vinkler i rummet

Opgave 1 - Lineær Funktioner. Opgave 2 - Funktioner. Opgave 3 - Tredjegradsligning

Integralregning med TI-Interactive! Stamfunktioner Integraler Arealer Jan Leffers (2005)

Afstande, skæringer og vinkler i rummet

IT B 2.4. Produkt til læring. IT - projekt

MATEMATIK A-NIVEAU. Anders Jørgensen & Mark Kddafi. Vejledende eksempler på eksamensopgaver og eksamensopgaver i matematik, 2012

MATEMATIK A. Indhold. 92 videoer.

ROSKILDE TEKNISK GYMNASIUM Matematik og IT projekt i klasse 3.4 af: Casper Lykke Larsen - Lars-Emil Jakobsen - Thomas Denckert Hernes

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

Programmering C Eksamensprojekt. Lavet af Suayb Köse & Nikolaj Egholk Jakobsen

Lysets hastighed. Navn: Rami Kaddoura Klasse: 1.4 Fag: Matematik A Skole: Roskilde tekniske gymnasium, Htx Dato:

π er irrationel Frank Nasser 10. december 2011

Fable Kom godt i gang

Graph brugermanual til matematik C

Computerspil. Hangman. Stefan Harding, Thomas Bork, Bertram Olsen, Nicklas Thyssen og Ulrik Larsen Roskilde Tekniske Gymnasium.

Fag: Matematik A og Informationsteknologi B

Fable Kom godt i gang

Hvis man ønsker mere udfordring, kan man springe de første 7 opgaver over. Skitser det omdrejningslegeme, der fremkommer, når grafen for f ( x)

Funktioner. 3. del Karsten Juul

APPENDIX A INTRODUKTION TIL DERIVE

MATEMATIK A-NIVEAU. Kapitel 1

Kom godt i gang med Fable-robotten

Vektorfunktioner. (Parameterkurver) x-klasserne Gammel Hellerup Gymnasium

Programmering C RTG

Andengradsligninger. Frank Nasser. 11. juli 2011

Oprids over grundforløbet i matematik

Matematikprojekt Belysning

Tværfagligt Projekt. Matematik og IT

Andengradsligninger. Frank Nasser. 12. april 2011

lineær regression er en metode man bruger for at finde den mindste afstand mellem bestemte punkter ved at bruge denne formel: a= n i=1 i=1

Matematik Aflevering - Æggebæger

Numerisk differentiation og integration med Python

Undersøgelse af funktioner i GeoGebra

Analytisk geometri. Et simpelt eksempel på dette er en ret linje. Som bekendt kan en ret linje skrives på formen

Matematik A-niveau 22. maj 2015 Delprøve 2. Løst af Anders Jørgensen og Saeid Jafari

Grønland. Matematik A. Højere teknisk eksamen

i x-aksens retning, så fås ). Forskriften for g fås altså ved i forskriften for f at udskifte alle forekomster af x med x x 0

Besvarelser til Calculus Ordinær eksamen - Forår - 6. Juni 2016

Løsninger til eksamensopgaver på A-niveau 2017

Matematik C. Cirkler. Skrevet af Jacob Larsen 3.år HTX Slagelse Udgivet i samarbejde med Martin Gyde Poulsen 3.år HTX Slagelse.

Når eleverne skal opdage betydningen af koefficienterne i udtrykket:

Introducerende undervisningsmateriale til Geogebra

Projekt 1.4 Tagrendeproblemet en instruktiv øvelse i modellering med IT.

Undervisningsbeskrivelse

Gratisprogrammet 27. september 2011

Undervisningsbeskrivelse

Mere om differentiabilitet

Brugervejledning til Graph

Løsninger til eksamensopgaver på A-niveau 2019 ( ) ( )

Løsning af simple Ligninger

cvbnmrtyuiopasdfghjklæøzxcvbnmq wertyuiopåasdfghjklæøzxcvbnmqw ertyuiopåasdfghjklæøzxcvbnmqwer tyuiopåasdfghjklæøzxcvbnmqwerty

Differentialregning med TI-Interactive! Indledende differentialregning Tangenter Monotoniforhold og ekstremum Optimering Jan Leffers (2009)

Undervisningsbeskrivelse

ADGANGSKURSUS AALBORG UNIVERSITET. Formelsamling. Brush-up Flex

Hvis man ønsker mere udfordring, kan man springe de første 7 opgaver over. Skitser det omdrejningslegeme, der fremkommer, når grafen for f ( x)

Fortløbende summer NMCC Danmark Muldbjergskolen 8.P

Undervisningsbeskrivelse

Undervisningsbeskrivelse

Dokumentation af programmering i Python 2.75

Undervisningsbeskrivelse

Undervisningsbeskrivelse

ROSKILDE TEKNISKE GYMNASIUM. Læringsprogram. Lommeregner

1 monotoni & funktionsanalyse

Automatisering Af Hverdagen

Undervisningsbeskrivelse

Pointen med Funktioner

Undervisningsbeskrivelse

Undervisningsbeskrivelse

gudmandsen.net 1 Parablen 1.1 Grundlæggende forhold y = ax 2 bx c eksempelvis: y = 2x 2 2x 4 y = a x 2 b x 1 c x 0 da x 1 = x og x 0 = 1

Transkript:

Rumlige figurer Matematik A og Programmering C - projekt Projektopgave bearbejdet af: Navn: Rami Kaddoura og Safa Sarac Fag: Matematik og Programmering Vejledere: Karl Bjarnason og Jørn Bendtsen Skole: HTX, Roskilde Tekniske Gymnasium Klasse:.4 Udleveringsdato: 1. september.011 Afleveringsdato: 10. oktober.011

Indhold 1. Abstract.... Indledning... 4. Den rumlige figur... 5.1 Valg af figur... 5. Krav til figuren... 5. Funktionsudtryk... 6..1 Løsningsmodeller... 6.. Sinus-funktionsudtryk f(... 7.. Andengradsfunktionsudtryk g(... 8..4 Cirkel-funktionsudtryk c( (foreløbigt... 11..5 Lineær-funktionsudtryk h(... 1..6 Cirkel-funktionsudtryk c( (endelig... 14..7 Opsummering af funktionsudtrykkene... 16.4 Længdesnit og rumfang af omdrejningslegemet... 17.4.1 Bestemmelse af længdesnit... 17.4. Bestemmelse af rumfang... 17 4. Programmeringsdelen... 19 4.1 Kravspecifikation (generel... 19 4. Info om Python... 0 4..1 Design... 0 4.. Implementering i vpython... 0 4.. Test... 1 4. Info om Lazarus... 4..1 Design... 4.. Implementering i Lazarus... 4.4 Endelige test... 5 4.5 User Stories... 6 5. Konklusion... 7 Bilag 1- Introduktion til systemudviklingsmetoden... 8 Bilag Python kildekoder... 9 Bilag Lazarus kildekoder... 0

1. Abstract The point of this project was to select an object which can be described using mathematical function epressions. The mathematical function epressions that were set should reflect the academic level at rd year. The project also went out on calculating the length and volume of the object, to give a clear impression of its physical size. The empirical data that we had in the calculation of volume and length were processed by the help of differential calculus and integral calculus. An important part of the project was the programming part, which was to visualize the object in D format. The graphical interface was created in Lazarus and also in Python with the visual module for this purpose. The point of using Lazarus is to be able to enter different variables in our epressions, and in that way the program is able to visualize it using vpython.

. Indledning Denne tværfaglige projektopgave er lavet i samarbejde med fagene Programmering C og Matematik A. Rapporten er bearbejdet af to. års elever studerende på det tekniske gymnasium, HTX, i Roskilde. I forbindelse med fagene Programmering og Matematik, har vi fået til opgave at designe en rumlig figur, lave matematiske beregninger på denne, samt lave en grafisk brugerflade som visualiserer vores figur i D. En nærmere analyse dokumentation af matematikdelen og programmeringsdelen oplyses i de kommende afsnit. Vi har i gruppen valgt at være beskæftigende med en el-pære. Vi skal lave matematiske beregninger og programmere en D figur af el-pæren i programmeringssproget Python. Den grafiske brugerflade laver vi i et andet programmeringssprog, nemlig Lazarus. Programmet i Lazarus skal sørge for en ændring af en variabel i selve koden i Python, og samt vise et billede af figuren med den variabel der er blevet ændret. Rapportstrukturen er lavet ud fra de generelle krav for projektopgaver i matematik samt systemudviklingsmetoden i programmering. På den måde kan vi sørge for en rød tråd gennem både matematikken og programmeringen. 4

. Den rumlige figur I dette afsnit kommer vi ind på vores valg af figur, og begrundelse af valget. Vi kommer også ind på de forskellige krav vi har fået stillet til vores figur. Yderligere kommer vi ind på vores løsningsstrategi, opstilling af funktioner og udregning af volumen..1 Valg af figur Det vi startede med at gøre, var at vi i gruppen satte os ned og begyndte at kigge på forskellige genstande i lokalet, som vi kunne bruge i forbindelse med dette tværfaglige projekt. Da vi havde gjort det, gav det os et overblik over hvor mange ting man kunne arbejde med i forbindelse med projektet. Men for ligesom at skelne os ud fra de andre grupper, tog vi os en lille rundtur til de forskellige grupper for at se hvad de beskæftiget sig med. Det endte så med at vi valgte at arbejde med en el-pære, som den rumlige figur. Det er ikke hele pæren vi vil arbejde med, men kun glasset på pæren. Grunden til at el-pæren lå blandt vores valgte figurer, var netop fordi el-pæren har et symmetrisk snit, og så har den forskellige former, som man kan man manipulere lidt med.. Krav til figuren For netop at have helt styr på vores figur, blev vi nødt til at stille nogle krav som figuren skulle overholde. Vi fik målt længdesnittet på forskellige el-pærer, og det gav gennemsnitligt en længde på ca. 8 cm (glasset og en maksimumradius på ca. cm. Vores krav som vi har fået stillet til vores figur bliver nævnt i punktform forneden: 1. Længdesnittet til figuren skal være 8 cm, alt afhængigt om noget SKAL ændres undervejs.. Den store radius på figuren skal være cm.. Vores opstillede funktioner skal tangere i et bestemt punkt eller være forbundet. Dvs. at dette skal gælde: f ' ( g' ( før at det er opfyldt. 4. Der må ikke være en form for et knæk i funktionerne, den skal være glat. 5. Funktionerne må ikke være for simple, men heller ikke alt for trivielle. Forneden ses en skitse af hvordan vi havde forstillet os at vores figur skulle se ud: 5

. Funktionsudtryk Eftersom vi har fået stillet krav til vores figur, kan vi nu gå i gang med at kigge på hvor mange funktionsudtryk vi skal have med at gøre. Efter nogle overvejelser og skitseringer og mm. kom vi frem til at vi vil arbejde med fire funktionsudtryk, som skulle være rigeligt til udformning af figuren. Vores funktioner skulle dels være: en sinusfunktion, en parabel, en lineærfunktion og en cirkelfunktion. Dette har vi prøvet at illustrer på billedet forneden, hvor vi har valgt at lade vores figur være vandret med -aksen. Dette er blot et eksempel på hvordan vores forskellige udtryk nogenlunde ville se ud...1 Løsningsmodeller Løsningsmodel 1 Vores første løsningsmodel var, at vi først ville opstille sinusfunktionen og dernæst cirkelfunktionen. Så ville vi bestemme en tangent til cirkelfunktionen der havde en hældning på ca. 0,5. Til sidst ville vi bestemme et udtryk for parablen, som både skulle tangerer sinusfunktionen og den rette linje. Dette er vist til højre. Her prøvede vi at finde et udtryk til parablen, som havde grenene vendt opad og som tangerede de to funktioner. Dette blev alt for trivielt og var alt for tidskrævende. Derfor besluttede vi os for at ændre strategi, angående bestemmelse af funktioner. 6

Løsningsmodel Vores nye løsningsmodel går ud på at vi først bestemmer vores sinusfunktion, og dernæst bestemmer parablen der tangerer sinusfunktionen. Når dette så er gjort, vil vi bestemme et udtryk for cirkelfunktionen (foreløbigt. Så vil vi bestemme en ret linje, som skal tangerer parablen og på samme tid skal den komme ret tæt på cirkelperiferien. Derfra kan vi ændre på cirklens radius og sørge for at den rette linje vil tangere cirkelfunktionen. Dermed vil vi have opstillet fire forskellige funktioner, hvori alle tangere hinanden... Sinus-funktionsudtryk f( Vores første funktionsudtryk er en sinusfunktion. En normal sinusfunktion ses forneden: Vi skal så have tilpasset vores funktion, så den passer med vores figur. I vores tilfælde vil vi meget gerne have at funktionen bliver forskudt op ad y-aksen og skærer i punktet (0,0.5. Så vil vi også have at funktionen skal have en højde på 0,5. Dvs. at funktionen skal have et ekstremumspunkt i punktet (0.5,1. For at opfylde vores krav til funktionen, har vi undersøgt hvad de forskellige variabler gør ved funktionen, og forneden er disse oplyst: Forskellige variabler Hvad de gør ved funktionen sin( Den går fra origo til π og har en højde på 1. sin( - Højden bliver lig med k. sin( k k 1 - Højden bliver lig med. k sin( k sin( k - Forskydning op ad y-aksen med k. - Forskydning ned ad y-aksen med k. sin( k sin( k - Længden forkortes med. k - længden forlænges med k. 7

Så for at opstille vores ønskede funktion, bliver vi nødt til at bruge at bruge alle reglerne. Dvs. at vi vil forkorte vores buelængde til at være lig med 1, (1 derfor ganger vi med π i sinus-parentesen Så vil vi halvere højden, ( derfor dividerer vi sinusfunktionen med. Til sidst vil vi forskyde funktionen 0,5 op ad y-aksen, ( derfor lægger vi 0,5 til funktionen. Således: (1 sin( ( sin( sin( ( 0, 5 sin( Så vores endelige udtryk kommer til at hedde: f ( 0, 5 Vi skal også huske på at funktionen kun skal gå fra (0,0.5 til (0.5,1. Dette er illustreret forneden:.. Andengradsfunktionsudtryk g( Vi skal nu have opstillet et funktionsudtryk for parablen der har grenene vendt opad og som skal tangerer sinusfunktionen i punktet (0.5,1, det svarer til sinus-funktionens lokale maksimum og parablen lokale minimum. Vi anvender en formel, som vi fandt frem til. Den kan ses til højre. Formlen er let-anvendeligt, da man kan indtaste sine ønskede værdier i den, og med det samme, får man det ønskede udtryk. - a = størrelsen på parablen - (c,b = Ekstremumspunkt (,y a( c b Vi fastsætter at koordinater til vores ekstremumspunkt skal ligge i punktet (0.5,1, dvs. at c = 0,5 og b = 1. Yderligere fastsætter vi også vores størrelse på parablen til at være 0,5 dvs. at hver gang man tager et skridt hen ad -aksen, går man 0.5, 1.5,.5 osv. op ad y-aksen. Dette ses forneden. 0 1 4 5 f( 1 1,5 5.5 9 1,5 8

Nu kan vi blot skrives vores værdier ind i formlen, og vi får vores funktionsudtryk: g ( 0,5( 0,5 1 Nu ligner vores udtryk ikke en hel almindelig.gradspolynomie, men formlen er bare blevet omskrevet fra den originale skrivemåde, nemlig a b c. Vi vælger at omskrive vores udtryk, til den mere almindelige skrivemåde. Vi gør følgende: g( g( g( 0,5( 0,5( 0,5 0,5 0,5 0,5 1 1,15 1 Vi ganger potensen ind i parentesen. Her bruger vi reglen for kvadratet på en toleddet størrelse. Vi ganger 0,5 ind i parentesen og lægger 1-tallet til det reelle tal. Så fik vi omskrevet udtrykket til den klassiske måde. Vi sammenligner lige udtrykkene, for at sikre os at de er ens: g ( 0,5( 0,5 1 g ( 0,5 0,5 1, 15 Undersøgelserne viser at funktionerne er ens, da de begge går gennem samme punkter. Nu skal vi sikre os at sinusfunktionen f( og parablen g( tangerer hinanden i punktet (0.5,1. Vi kan med det samme resonere os frem til at det gør de, da de begge har ekstremum i det punkt. For at vise det analytisk, skal vi først differentiere udtrykkene, for at vise at de har en vandret tangent i samme punkt. 9

Vi differentierer først f(. For at gøre det, skal vi bruge regnereglen for en sammensat funktion, samt reglen for differentiation en sinus. f( f g ' f ( f ' g fg' g (sink' k cos k f ' ( sin( cos( Vi differentierer først nævneren. f g ' ( cos( (sin( 0 cos( Så differentierer vi hele brøken og forkorter. Dokumentation Så differentierer vi g( som er ret simpel. g ' ( 0,5 Dokumentation Nu når vi har fået differentieret begge funktioner, kan vi indsætte = 0,5 i begge udtryk, og se om de har en vandret tangent i det punkt: cos( 0,5 f ' (0,5 0 g' (0,5 0,5 0,5 0 Dette viser at de har en vandret tangent i samme punkt. Så det vil sige at de tangerer hinanden, som vi resonerede os frem til. 10

..4 Cirkel-funktionsudtryk c( (foreløbigt Vi vil nu bestemme et udtryk for cirkelfunktionen, men dette udtryk vil være foreløbigt, da vi kommer til at ændre på radiussen en smule, for at få det hele til at passe sammen. For at opstille et udtryk for cirklen, skal vi først og fremmest tage udgangspunkt i cirklens ligning, som ser således ud: ( ( y y r 0 0-0 og y 0 er centrumskoordinater (,y for cirklen. - r er lig med radius. Nu vil vi indsætte vores værdier i ligningen og omskrive den for at det kommer til at ligne et normalt funktionsudtryk, derfor skal vi i princippet have isoleret y. Vi gør følgende: ( ( 5 5 ( ( ( y y 5 5 0 y y 0 Vi ganger ind potensen ind i parentesen i y. Vi trækker fra på begge sider. Vi lægger y til på begge sider. y ( 5 Vi fjerner potensen, ved at tage kvadratroden Nu ved vi at vores funktionsudtryk for cirkelfunktion ser således ud kan ses forneden: c ( ( 5, og den På figuren foroven kan man se hvordan funktionen danner en cirkel der har centrum i (5,0 og har en radius på. 11

..5 Lineær-funktionsudtryk h( Nu har vi så fået opstillet tre forskellige funktionsudtryk, og mangler den sidste. Den sidste funktion vi skal opstille er en lineærfunktion som forbinder parablen g( og cirklen c(. Billedet forneden viser hvordan den lineærfunktion nogenlunde tangerer g( og c(. Det vi nu vil gøre, er at vi vil undersøge i hvilket punkt på parablen, kan vi lave en tangent der nogenlunde rører cirklen. Vi skal altså komme meget tæt på, nemlig fordi vores strategi er at vi blot ændre på cirklens radius, således at den passer med at de tangerer hinanden. Efter nogle undersøgelser på programmel Graph, kom vi frem til at vi gerne vil lave en tangent i til parablen i g(1,1 = 1,18; dette er markeret på billedet forneden. Vi ved at hvis vi skal opstille et udtryk for en ret linje, skal vi tage udgangspunkt i linjens ligning som ses til højre. y y Linjens ligning f' ( ( 0 0-0 og y 0 er punktets koordinater til tangenten (,y - f ( er hældningen i punktet f(. 1

Vi kender koordinaterne til tangenten, og mangler blot hældningen i punktet. Det problem løser vi ved at vi bruger det differentierede udtryk fra afsnit (.. Andengradsfunktionsudtryk g( og indsætter = 1,1 for at finde hældningen i punktet. g( 0,5 0,5 1,15 g' ( 0,5 g' (1,1 1,1 0,5 5 Nu når vi har fundet hældningen i punktet, har vi stort set alt hvad vi skal bruge til at kunne opstille en tangent der tangerer parablen. y y 0 f ' ( ( 0 y y y 1,18 1,18 5 5 5 1 5 ( 50 1,1 Vi indsætter vores værdier. Vi ganger ind i parentesen. Vi lægger 1,18 på begge sider for at isolerer y. Dokumentation Nu har vi så fået bestemt vores lineær-funktionsudtryk, som er: h ( 5 Men nu har vi et problem, billedet forneden viser at den lineærfunktion ikke tangerer cirklen, og derfor bliver vi nødt til at ændre på cirklens radius for at få den til at passe. (Dette udfører vi i næste afsnit. 1 5 1

..6 Cirkel-funktionsudtryk c( (endelig Nu skal vi så have tilpasset vores radius, således at den vil tangerer med linjen h(. Vi ved at tangenten i et punkt på cirklen altid er vinkelret på linjen, som går gennem centrum af cirklen og punktet, og derfor kan vi finde den vinkelrette afstand fra centrum af cirklen til linjen h(. Den afstand vi så kommer frem til vil være den nye radius. Dette har vi prøvet at illustrer til højre. For at finde den korteste afstand mellem et punkt og en linje, bruger vi distformlen, som ses til højre. For at gøre det lidt nemmere for os, når vi skal udregne afstanden, kan vi omskrive linjens ligning til denne form: a by c 0. For at gøre det, skal vi blot trække y fra på begge sider. y 5 5 y 1 5 1 5 0 Nu har vi så omskrevet udtrykket til linjens ligning, og kan nu kigge på hvilke værdier vi skal indsætte i formlen for at finde den korteste afstand: - d og e er lig med centrumskoordinaterne (5,0 - a, b og c er lig med variabler fra ligningen. Så indsætter vi blot vores værdier ind i formlen, og vi får: 1 5 (1 0 5 44 4 dist ( C, l 5 1 5 Dokumentation Dist-formlen dist ( C, l ad be a b c 44 4 Den nye radius er så, 018 Det er en forskel på 0,018. 44 4 Det nye funktionsudtryk er så: c ( ( 5 14

Nu skal vi blot sikre os at det vi har udregnet er korrekt, netop ved at vi sætter de to ligninger lig med hinanden. Dermed vil vi komme frem til koordinaterne til det punkt, hvori tangenten og cirklen tangerer hinanden. Vi gør følgende: c( h( 44 4 ( 5 5 1 5 Vi sætter ligningerne lig med hinanden 9 Vi isolerer Dokumentation Nu indsætter vi -værdien ind i begge ligninger, og ser om vi får det samme. Hvis de giver samme resultat, betyder det at de tangerer hinanden i netop det punkt: c 9 44 4 9 5 44 17 g 9 5 9 1 5 44 17 Dokumentation Så fik vi bekræftet at de to funktionerne tangerer hinanden. Nu er vi så færdige med opstilling af funktionsudtryk. For et bedre overblik over det, se venligst næste afsnit. 15

..7 Opsummering af funktionsudtrykkene Her kommer en lille opsummering over de fire funktionsudtryk, som vi har fået opstillet undervejs. Sinusfunktionen f( Intervalgrænsen = [0;0.5] sin( f ( 0,5 Andengradsfunktionen g( Intervalgrænsen = [0.5;1.1] g ( 0,5 0,5 1,15 9 Lineærfunktionen h( Intervalgrænsen = [1.1; ] h ( 5 1 5 9 44 4 Cirkelfunktionen c( Intervalgrænsen = [ ; 5 ] 44 4 c ( ( 5 Forneden ses vores funktionsudtryk sat sammen. Det burde give et indtryk af, at dette er en el-pære. På billedet foroven kan man se hvordan vores funktioner er blevet sat sammen og danner nu en figur der har formen af en el-pære. 16

.4 Længdesnit og rumfang af omdrejningslegemet Vi skal have bestemt både længdesnittet og volumenet af figuren, og det gør vi vha. integralregning. Længdesnittet er ret simpel at bestemme, hvorimod volumenet bliver lidt for trivielt, da vi har at gøre med funktionsudtryk der er ret barske at integrerer..4.1 Bestemmelse af længdesnit Vi skal nu have bestemt længdesnittet til vores figur. Det gør vi ved at vi skal kende start- og slutpunktet på -aksen. Vi ved at vores figur starter i (0,0.5, så skal vi bare have fundet ud af hvor på -aksen den slutter præcis. Den måde vi gør det på, er at vi kender den nye radius og centrumskoordinaterne til den store cirkel. Så skal vi bare lægge radiussen til centrum, og vi får vores længde: Centrum = (5,0 Radius = 44 4 Længdesnittet = 44 4 5 8,018cm Nu når vi har fået beregnet vore længdesnit, kan vi gå videre til integrering af udtrykkene for at bestemme volumenet af figuren..4. Bestemmelse af rumfang For at bestemme rumfanget for figuren, skal vi have integreret hvert eneste funktionsudtryk, for nemlig at kunne beregne deres rumfang ud. Når man skal integrer skal man i princippet findes stamfunktionen til sine funktionsudtryk. I vores tilfælde skal vi have beregnet volumen ud fra et omdrejningslegeme om -aksen, og derfor benytter vi formlen til højre. Hvis vi kigger i afsnittet (..7 Opsummering af funktionsudtrykkene, kan vi se at vi har at gøre med meget barske udtryk. Dvs. at de er svære at integrere vha. normal b integration. Det første udtryk f( er f.eks. svær at integrere, og det der V f d a karakterisere at den er svære at integrere, er at den består af en sammensat trigonometriskfunktion i en sammensat funktion. I de her tilfælde bliver man nødt til at bearbejde integralet vha. partiel integration. Partiel integration bliver brugt ved produktet af to funktioner, og det handler om at opdele integralet i to led, der gør det nemmere at bearbejde. - Da vi ikke rigtigt har haft om partiel integration, kan vi i vores tilfælde ikke løse integralerne analytisk, og bliver derfor nødt til at anvende programmel. Der er dog en undtagelse i funktionen h(, da den er forholdsvis enkel at integrere. Det første vi gør, er at vi integrere h( analytisk og vurdere med programmel, og dernæst udregner vi de tre andre vha. programmel. 17

18 ( 9 1,1 9 1,1 9 1,1 7,97 0,1 65 169 75 9 0,1 65 169 75 9 ( 0,64 65 169 5 9 ( 5 1 5 ( cm V d F d F h h ( 1,1 0,5,1 1,15 0,5 0,5 ( 1,15 0,5 0,5 ( cm V d F g f ( 8,0188 9 98,10 5 ( 4 44 ( 5 ( 4 44 ( cm V d F c f Den endelige volumen er: 75 18, 98,10 7,9,1,089 1 cm Vi ganger potens ind. Vi integrerer. ( 0,5 0 1,089 0,5 sin( ( 0,5 sin( ( cm V d F f f

4. Programmeringsdelen I dette afsnit vil vi analyserer og beskrive vores fremstillede prototype i både Python og Lazarus. Systemudviklingsmetoden 1 spiller igen en særlig rolle, vi har dog sorteret planlægningsfasen fra, da vi synes at det ikke var helt så relevant i dette projekt. Vi kommer ind på User Stories og forklarer den med hensyn til vores produkt. 4.1 Kravspecifikation (generel Vi skal udvikle et IT-produkt, som skal visualisere vores valgte figur i D format. I gruppen har vi valgt at visualisere figuren ved brug af Python. Derudover skal vi udvikle en brugerflade i programmeringssproget Lazarus, som skal variere mindst én variabel, altså en parameter. Brugerfladen skal kunne vise det beregnede volumen af figuren. Her kommer en opsummering af alle de krav: - Der skal udvikles et IT-produkt, som skal visualisere figuren i D og længdesnit i D. - Brugerfladen udviklet i Lazarus skal kunne variere en eller flere parametre og vise det - Arbejdsformen pair programming skal anvendes til væsentlige dele af programmeringsarbejdet, og i konklusionen skal der reflekteres over erfaringerne med denne arbejdsform. - Programmeringsforløbet skal dokumenteres, - herunder kravspecifikation, design, implementering og test. Derudover har vi i klassen bemærket yderligere 6 kerneproblemer som er værd at tænke over: 1. Fremstille D modellen som en tekstfil eller som en kompileret objektkode, et programmeringsværktøj.. Integration, implementering af, i Lazarus, dvs. i Object Pascal.. Jævn overgang mellem to af delobjekterne. 4. Ændring af en eller flere variabler. 5. Starte eksterne programmer fra et Object Pascal program lavet med Lazarus. 6. Vide hvornår rendering af D billedet af vores matematiske D model er færdig og opdatere billedet i brugerfladen på vores Lazarus-program. 1 Bilag 1- Introduktion til systemudviklingsmetoden 19

4. Info om Python Python er et meget specielt programmeringssprog, som adskiller sig fra de fleste programmeringssprog. Programmet er oprindeligt udviklet af den hollandske Guido van Rossum. Det der gøre programmet så speciel er at dens grammatik adskiller sig fra de fleste andre programmeringssprog ved at de logiske programdele i Python opdeles ved hjælp af indrykning (eng. indentation, frem for at bruge parenteser, som de fleste programmeringsprogrammer gør. Opdelingen af programdelene i Python sørger for at man hele tiden har struktur på sine koder. Programmet hjælper hermed også med at integrere vores systemer mere effektivt. Programmeringsprogrammet er en freeware og derfor kan man hente den helt gratis, men selvfølgelig er der nogle licenskrave. Python er tilgængeligt under en, OSl-godkendt, Open Sourcelicens, og selve licenskravene kan blot ses på Wikipedia.org (http://en.wikipedia.org/wiki/python_software_foundation_license 4..1 Design Designet for vores visuelle produkt i Python har ikke været svært at bestemme. Da vi havde nogle funktioner at gå ud fra, altså når vi skulle tegne dem ind, har der ikke rigtigt været nogen problemer med at bestemme designet. Det eneste vi synes kunne være en god ide, var at vise vores funktioner med forskellige farver, så vi let kan se hvor mange forskellige funktioner figuren består af. Vores første funktion er gul, den næste er hvid, den efterfølgende er blå og den allersidste er rød. Akserne er tegnet på en måde at hver akse har sin egen farve. 4.. Implementering i vpython I Visual Python er det lykkedes os at visualisere vores figur i D. I gruppen havde vi arbejdet med Python i flere forskellige projekter, derfor var vi på hjemmebane med programmeringssproget. Vi vil nu beskrive hvordan vi har kodet vores figurer i Python. Vores pointe er at tegne en masse cylinder mellem vores intervalgrænser. Vores input skal i tilfældet her være en ændring af et variabel/parameter, og det skal ske ved at man skal skrive et tal i inputfeltet. Ved hjælp af funktionen File Handling i Lazarus, skal det givne data (den man har skrevet i inputfeltet overføres til vores dokument med vpython koderne, derefter skal den så vise et billede. Da vi ikke har nogle grimme funktioner som f.eks. logaritmefunktioner, kan vi nøjes med at importere fra visuel import. Der kræves yderligere ikke at importerer fra matematikken, programmet kan læse vores funktioner korrekt. http://wiki.lazarus.freepascal.org/file_handling_in_pascal 0

Vi skal hermed definere et funktionsudtryk med hensyn til, og det gør man ved at sige def navnet for funktionen (;. Men hvordan skriver vi så selve funktionerne ind? I Python kan funktionsudtrykke læses ved at skrive return ind foran selve funktionen, altså return f(. Et lille problem kan være at programmet ikke kan læse gangetegnet foran, i f.eks. tilfældet f(=5+b, man skal huske at adskille 5 fra netop ved at sætte gangetegn foran, altså f(=5*+b. Vi skal fortælle programmet at vores funktion skal have en intervalgrænse, og at der skal tegnes nogle cylindere mellem det givne interval. Det gør vi ved at sige for in arange (a, b, antal cylindere for hver gang man går hen på -aksen. Hvis vi har intervalgrænsen *a;b+, og vi vil have en cylinder for hver gang man går 0,1 hen ad -aksen, skriver vi blot: for in arange (a, b, 0,1. Vi vil også have vores funktion for grafen til at resonerer en y-værdi, for hver gang man sætter en -værdi. Vi siger at vores y-værdi er lig med vores definerede funktion. For at fortælle vores cylinder hvilke arbejde den skal fortage, vi angiver dets startsposition, hvilket akse den skal gå ud af, hvilke radius den skal have og evt. hvilken farve den skal tegne i. Til sidst kan vi så indstille kameraet (scene.center = (,y,z Dette gøres med alle de funktioner man har brugt til at lave selve figuren (se bilag 1. For at tegne nogle akser som passer til figuren, som i grafen på matematikdelen, skal man bruge følgende kode: Her fortæller man hvordan man vil placere akserne, hvilken farve den skal have og hvor tyk og tydelig den skal være. 4.. Test Afprøvning af programmet skete ved at køre vores program. Det gøres ved at taste F5 tasten. Derudover har vi spurgt nogle fra klassen om de kunne se hvad figuren skulle forestille, de sagde uden tvivl at det var en el-pære. 1

4. Info om Lazarus Lazarus (IDE, Integrated development environment, Integreret udviklingsmiljø er et freeware mulit-platform (vil sige at den fungerer på flere platforme, f.eks. Linu og Microsoft Windows. Programmet er god til at lave en brugerflade på en meget let måde. Man har muligheder for at placere sine knapper og skrivefelter blot ved at klikke på ikonerne der findes i menuen, så man på denne måde kan tegne knapperne med ønskede størrelse og placering. Man kan kode hver eneste knap med nogle funktioner på overskuelig måde. Lazarus er udviklet til formål af nogle frivillige i sammenhænge med Free Pascal, som er en compiler. Programmet har flere licenser, hvor den ene er GNU General Public License. 4..1 Design Ud fra logikken bag Gestaltloven, beslutter vi os for at grupperer knapperne efter funktion, samt gøre det mere brugervenligt og overskueligt. Vi startede med at tegne nogle skitser for hvordan brugerfladen skulle se ud. Til sidst sorteret vi den skitse vi synes var bedst. Og derefter tegnede vi vores endelige skitse for hvordan vi vil have vores brugerflade i Lazarus til at se ud. På de to øverste skitser kan vi se vores ønskede brugerflade. Vi starter med at indsætte en variabel, derefter klikker vi på knappen change variable. Når vi så klikker Show picture, så kommer billedet frem med de ændrede indstillinger. Til sidst kan vi klikke på calculate volume knappen for at beregne volumen. Vores endelige brugerflade kommer til at se således ud:

4.. Implementering i Lazarus For at få vores variabel/parameter ændret i vores vpython (som ovennævnt sker ved File Handling, skal vi først fortælle vores program i Lazarus at den skal overføre data fra inputfeltet videre til vpython, som nu skal ændre det variabel man ønsker. Det gør vi ved at fortælle programmet at hver gang vi skriver et tal i inputfeltet, skal den overføres til vpython og ændre parameteren/variablen : Var Edit1: integer; Vi ønsker i gruppen at lægge det tal der bliver skrevet í inputfeltet til vores funktion i vpython. På den måde bliver vores D figur justeret op eller ned ad y-aksen. I Python havde vi allerede defineret en funktion: def lillesinus(: return sin(*pi/+0.5+0 Og i Lazarus skriver vi hermed: Bemærk at vi har sagt at der skal lægges Edit1.Tet (altså et tal til vores funktion. Derudover vil vi gerne gemme et D billede af figuren i Python, det skal nemlig vises i brugerfladen i Lazarus. Vi gør det ved at udnytte en funktion i Python, nemlig PIL (Picture Image Libary. Funktionen tager et screenshot af figuren i Python, når man lukker vinduet. Så skal vi gå tilbage til vores Python kode og importere yderligere fra PIL: Derudover skal vi definerer et start og slut punkt på hvordan vores screenshot skal tages og gemmes. Vi siger fortæller programmet at screenshottet skal gemmes i bmp. format: Nu skal vi så åbne billedet i brugerfladen. Det gør vi ved hjælp af koden som findes i Lazarus websiden: http://www.pythonware.com/products/pil/

Men en ting vi havde problemer med, var at åbne programmet. Vi fandt ud af at vi havde glemt at angive en variabel (under var og en type. Det gjorde vi ved at tilføje: Var Bitmap: TBitmap; og Type Image1: TImage; I AProcess skulle vi blot angive en fil som funktionen skulle finde. Vi angiver selvfølgelig vores Py. fil. Bemærk at vores fil ikke er en ee fil. Derfor adskiller vi vores ee fil med et mellemrum, så vi dernæst kan angive vores filplacering:. De vigtigste begreber i Lazarus: Nu vil vi kort introducere til de forskellige begreber, så vi senere hen får det lettere ved at forstå fremgangsmåden. Producere: denne funktion fortæller programmet at der skal programmeres i det element man skriver, f.eks. kan det være en button1. 4

Begin: alt det der kommer efter begin knappen er koden til selve knappen. End: Når der ikke skal være koder længere, slutter man det af med end. Unit: begrebet fortæller hvilke unit der kodes i. Uses: hvilke funktioner skal anvendes? Var: Dette er en variabel i programmet. Det kan være et tal. 4.4 Endelige test Vi tester programmet ved at køre den. Vi taster en variabel ind, og ser om en ændring sker. Vi vil desuden prøve at hente billedet og vise det i brugerfladen. Vi prøver at taste ind i inputfeltet: Vi prøver at indtaste 5 ind i inputfeltet: Vi kan se at figurens form bliver anderledes for hver gang man ændrer variablen. Det viser at vores program er lavet succesfuldt. 5

Hvis vi kigger ind på Python dokumentet, så kan vi se om der er lagt det tal vi har skrevet ind på inputfeltet til vores funktionsudtryk: Vi kan se at der er lagt 5 til på funktionen. Da dette kun er en prototype, fik vi lov af vores lære, at vi bare kunne lave et felt til beregning af volumenet. I oplæget havde vi misforstået det var programmet der skulle kunne beregne volumenet, eller om det bare skulle gøres i hånden, på papir. Dette er vi yderst utilfredse med. 4.5 User Stories 4 Efter en snak med vores programmeringslære Karl, har vi valgt at lave en User Stories. På billedet forneden ses vi (brugeren gerne vil fremstille et program, som han gerne vil teste. Brugeren (vi vil se om der er fejl i programmet, er der en eller flere fejl, skal man gå igennem iterationsfasen, og hvis ikke vi kan løse fejlene, skal vi lave et nyt projekt, men hvis vi godt kan løse problemet, så burde vores formål med at få vist et D figur af pæren være løst. Hvis ikke, så går man iterationsfasen igennem igen. Sådan bliver man ved. Denne behandling af processen er lavet ud fra brugerens ønsker til det program som skal fremstilles og testes. 4 http://www.etremeprogramming.org/map/project.html 6

5. Konklusion Først og fremmest valgte vi at arbejde med en el-pære, som skulle være den rumlige figur. Vi fik opstillet fire forskellige funktionsudtryk, som udformede el-pærens struktur. Heriblandt en sinusfunktion, linærfunktion, cirkelfunktion og en andengradsfunktion, som nogenlunde ville afspejle vores niveau på.år. Vi fik yderligere udregnet rumfanget og længdesnittet på figuren, hvor rumfanget var 18,75cm og længdesnittet 8,018cm. Vores længdesnit endte ikke som vi havde stillet i vores krav, nemlig 8 cm, men dette skyldes en ændring på et af funktionsudtrykkene. Vi fik også programmeret en grafisk brugerflade i Lazarus, som skulle visualisere figuren. I forbindelse med programmeringen, spillede vores to programmer meget godt sammen, nemlig (Python og Lazarus. Dette var med til at man kunne ændre på forskellige variabler i Lazarus, og dernæst få den vist i Python. Dog skulle vi også få programmet Lazarus til at udregne rumfanget ud på figuren ved forskellige størrelser, som vi aldrig fik udført. Dette er dog en prototype, og man kan altid forbedre den. 7

Bilag 1- Introduktion til systemudviklingsmetoden I systemudviklingsmetoden er der fem hovedbegreber. De fem hovedbegreber er hermed: - Planlægning - Krav- og testspecifikation - Design - Implementering - Afprøvning Begreberne hjælper til med at (i tilfældet her gennemføre en projektopgave med en rød tråd. Med de to øvrige begreber indledende aktiviteter og afsluttende aktiviteter danner man nærmest et hoved og hale i rapportens struktur, hvor man også skyder projektforløbet i gang med de indledede aktiviteter, mens man runder den af med de afsluttende aktiviteter. Med de to aktiviteter kan man lave op til flere iterationer (gentagelser. 8

Bilag Python kildekoder from visual import * from PIL import Image, ImageGrab scene.center = (8, -6, 5 def lillesinus(: return sin(*pi/+0.5+5 for in arange(0, 0.5,0.1: y=lillesinus( cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.yellow def eftersin(: return ((-0.5**/+1+5 for in arange(0.5, 1.1,0.1: y=eftersin( cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.white def rettelinje(: return 0.6*+0.5+5 for in arange(1.1,9/,0.1: y=rettelinje( cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.blue def cirkelfunktion(: return sqrt(((44*sqrt(4/**-(-5**+5 for in arange(9/, (44*sqrt(4/+5,0.1: y=cirkelfunktion( cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.red im = ImageGrab.grab((6,0,1000,1000 im.save("c:\\users\\sefa dos Keita\\Desktop\\Matprogramering\\TestFred\\billede.bmp" ax = arrow(ais=(1,0,0, pos=(-,0,0, color=color.red, shaftwidth=0.08, fiedwidth = 0 ay = arrow(ais=(0,1,0, pos=(0,-6,0, color=color.white, shaftwidth=0.08, fiedwidth = 0 9

Bilag Lazarus kildekoder unit Unit1; {$mode objfpc}{$h+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, EtCtrls, Menus, Process; type { TForm1 } TForm1 = class(tform Button1: TButton; Button: TButton; Button: TButton; Edit1: TEdit; Image1: TImage; StaticTet1: TStaticTet; procedure Button1Click(Sender: TObject; procedure ButtonClick(Sender: TObject; procedure ButtonClick(Sender: TObject; procedure FormCreate(Sender: TObject; procedure Image1Click(Sender: TObject; procedure StaticTet1Click(Sender: TObject; private { private declarations } public { public declarations } end; var Form1: TForm1; FileVar: TetFile; Edit1: integer; AProcess: TProcess; 0

Bitmap: TBitmap; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject; begin end; procedure TForm1.Image1Click(Sender: TObject; begin end; procedure TForm1.StaticTet1Click(Sender: TObject; begin end; procedure TForm1.Button1Click(Sender: TObject; begin //WriteLn('File Test'; AssignFile(FileVar, 'denendeligefigur.py'; // You do not have to put.tt but this is just for now {$I-} Rewrite(FileVar; // creating the file Writeln(FileVar,'from visual import *'; Writeln(FileVar,'from PIL import Image, ImageGrab'; Writeln(FileVar,'scene.center = (8, -6, 5' ; Writeln(FileVar,'def lillesinus(:' ; Writeln(FileVar,' return sin(*pi/+0.5+' + Edit1.Tet ; Writeln(FileVar,'for in arange(0, 0.5,0.1:' ; 1

Writeln(FileVar,' y=lillesinus(' ; Writeln(FileVar,' cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.yellow' ; Writeln(FileVar,'def eftersin(:' ; Writeln(FileVar,' return ((-0.5**/+1+' + Edit1.Tet ; Writeln(FileVar,'for in arange(0.5, 1.1,0.1:' ; Writeln(FileVar,' y=eftersin(' ; Writeln(FileVar,' cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.white' ; Writeln(FileVar,'def rettelinje(:' ; Writeln(FileVar,' return 0.6*+0.5+' + Edit1.Tet ; Writeln(FileVar,'for in arange(1.1,9/,0.1:' ; Writeln(FileVar,' y=rettelinje(' ; Writeln(FileVar,' cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.blue' ; Writeln(FileVar,'def cirkelfunktion(:' ; Writeln(FileVar,' return sqrt(((44*sqrt(4/**-(-5**+' + Edit1.Tet ; Writeln(FileVar,'for in arange(9/, (44*sqrt(4/+5,0.1:' ; Writeln(FileVar,' y=cirkelfunktion(' ; Writeln(FileVar,' cylinder(pos=(,0,0, ais=(0.1,0,0, radius=y, color=color.red' ; Writeln(FileVar,' im = ImageGrab.grab((6,0,1000,1000' ; Writeln(FileVar,' im.save("c:\\users\\sefa dos Keita\\Desktop\\Matprogramering\\TestFred\\billede.bmp"' ; Writeln(FileVar,'aX = arrow(ais=(1,0,0, pos=(-,0,0, color=color.red, shaftwidth=0.08, fiedwidth = 0' ;

Writeln(FileVar,'aY = arrow(ais=(0,1,0, pos=(0,-6,0, color=color.white, shaftwidth=0.08, fiedwidth = 0' ; CloseFile(FileVar; //ReadLn; end; procedure TForm1.ButtonClick(Sender: TObject; begin AProcess := TProcess.Create(nil; AProcess.CommandLine :='C:\Python6\python.ee "C:\Users\Sefa dos Keita\Desktop\Matprogramering\TestFred\denendeligefigur.py"'; AProcess.Options := AProcess.Options + [powaitoneit]; AProcess.Eecute; AProcess.Free; Bitmap := TBitmap.Create ; Bitmap.LoadFromFile('C:\Users\Sefa dos Keita\Desktop\Matprogramering\TestFred\billede.bmp'; Image1.Canvas.Draw(0,0,Bitmap; end; procedure TForm1.ButtonClick(Sender: TObject; begin end; end.