Sommer/efterår 2014 Rumlige figurer Fag: Matematik A og Informationsteknologi B Roskilde Tekniske Gymnasium Klasse 3.4 Af Rune Kofoed-Nissen og Under vejledning af Jørn Christian Bendtsen og Mette Frost Nielsen Afleveret: 06-10-14
Abstract This paper examines surfaces of revolutions and pair programming. The paper consists of three parts: A process of finding and creating a models curve, volume calculations of the surface of revolution and lastly the process of programming a scene with the model in 3D graphics, where the efficiency of pair programming is tested. The mathematical methods used in the paper include differential and integral calculus and therefore area formulas regarding surfaces of revolutions. Pair programming was used as a method of programming the surface of revolution in 3D graphics. The results of the work in the paper show that the calculus applied to a surface of revolution is crucial in the development of 3D models to print using 3D printers. In addition it is concluded that pair programming is a beneficial way of programming as four eyes are often more efficient than two resulting in significantly less bugs in the code. Side 2 af 22
Indholdsfortegnelse 1 Indledning... 4 1.1 Krav fra oplæg... 4 1.2 Egne krav... 4 1.3 Læsevejledning... 5 2 Valg af figur... 5 2.1 Orientering i koordinatsystem... 5 3 Tværsnittet... 6 3.1 Lineær... 7 3.2 Første trigonometriske stykke... 7 3.3 Sidste trigonometriske stykke... 8 3.4 Gaffelfunktion... 10 4 Omdrejningslegemet og dets volumen... 11 4.1 Volumen af... 11 4.2 Volumen af... 12 4.3 Volumen af... 13 4.4 Volumen af, total volumen... 14 5 IT produkt... 15 5.1 Kravsspecifikation... 15 5.2 Værktøjer... 15 6 Implementering... 17 6.1 Omgivelser... 17 6.2 Nederste bund... 17 6.3 Sinus kurve... 17 6.4 Finjustering... 18 6.6 Delkonklusion... 18 7 Konklusion... 19 7.1 Evaluering af gruppearbejde... 20 7.2 Evaluering af pair programming... 20 Side 3 af 22
1 Indledning I denne rapport vil der blive fundet en figur, som kan blive udtrykt ved funktioner. Figuren skal så genskabes som en model i et 3D miljø. Figuren skal være symmetrisk, da det skal være muligt at udregne volumen som omdrejningslegeme ud fra funktionen. Eksempler på sådanne figurer kan være glas, flaske, spand, skål osv. 1.1 Krav fra oplæg Det udleverede projektoplæg indeholder en række krav, som ønskes gennemarbejdet og dokumenteret i projektrapporten: - En rumlig figur designes og beskrives matematisk. Dernæst foretages der beregninger derpå, samt figuren visualiseres i et 2-dimensionelt koordinatsystem og i et 3-dimensionelt miljø. - Figurens længdesnit er symmetrisk, således at volumenet kan beregnes ved hjælp af regneregler for omdrejningslegemer. Figurens længdesnit skal altså først beskrives 2-dimensionelt ved hjælp af forskellige funktionstyper og derefter drejes om sig selv for at skabe en 3-dimensionel figur, hvis volumen kan beregnes. - De valgte funktionstyper er vilkårlige, men der skal være en flydende overgang mellem to af de pågældende funktioner hvis grafer illustrerer figuren. I samlingspunktet skal funktionerne have samme tangenthældning. Med andre ord må der ikke grafisk være noget knæk i overgangen. - Figuren illustreres i et 3D-miljø, såsom POV-Ray 1 eller vpython 2. 1.2 Egne krav Ud over projektoplæggets krav fastsættes der desuden en række egne krav, som også ønskes opfyldt: - Den valgte figur er en artikel, der kan findes i hjemmet, såsom et glas, flaske, lampe, potte og så videre. - Figurens dimensioner (enhedernes værdier) stemmer overens med virkeligheden. - Figuren modelleres i 3D-miljøet POV-Ray. 1 http://www.povray.org/ 2 http://vpython.org/ Side 4 af 22
Disse krav er for at vinkle opgave til at minde mere om en praktisk problemstilling. 1.3 Læsevejledning I afsnittet Valg af figur beskrives den valgte figur og en orientering af denne begrundes. I det næste afsnit Tværsnittet vælges funktionstyper til at illustrere tværsnittet af figuren i et retvinklet koordinatsystem. I afsnittet Omdrejningslegemet og dets volumen, vil vi finde volumen for hele figuren. I afsnittet IT- Produkt vil vi specificere de krav og værktøjer vi vil bruge til implementeringen i 3D-miljøet. Derefter fortæller vi så om implementeringen i afsnittet Implementering. Der sluttes af med en konklusion over hele forløbet, samt evaluering af pair programming. 2 Valg af figur Den valgte figur skal være en artikel der findes i hjemmet, samt at figuren skal have virkelige dimensioner. (som det fremgår af egne krav). Da figurens tværsnit skal tegnes i et 2-dimensionelt koordinatsystem og derefter drejes 360 o om sig selv, er det naturligvis også et (indirekte) krav at figuren er rund. Glencairn glass Efter inspiration fra projektoplæggets vinglas, er whiskyglasset af typen Glencairn glass valgt. Glassets form menes at leve op til det faglige niveau på 3. år, idet glasset har en tilpas mængde af afrundinger, som kan illustreres ved hjælp af flere forskellige funktionstyper, heriblandt trigonometriske funktioner. 2.1 Orientering i koordinatsystem Figuren skal naturligvis tegnes ind i et retvinklet koordinatsystem. Da figurens volumen skal kunne beregnes ved hjælp af regneregler for omdrejningslegemer, skal figurens tværsnit placeres på enten x- eller y-aksen. Side 5 af 22
y Som udgangspunkt findes der ingen fordele ved at placere legemet på x- eller y-aksen. I dette tilfælde lægges graferne for tværsnittet hen ad x-aksen, som følge af de funktionstyper der tages udgangspunkt i. Dette uddybes nærmere i afsnittet Tværsnittet. Graferne for tværsnittet placeres hen ad x-aksen. y x x 3 Tværsnittet Som det kan ses skitsen, valgte vi at dele figuren op i fire funktioner. Hvor den første er lineær, to næste er trigonometri og sidste r en eksponentiel funktion. Det samlede udtryk vil blive en gaffelfunktion. Senere fandt vi dog ud af at de 2 trigonometri funktioner kan erstattes af én, og den eksponentielle kan erstattes af en trigonometrisk, hvor den flydende overgang forekommer på de bredeste punkt på figuren, hvor hældningen er nul. Udregningerne vil indeholde mange decimaler, for at kurven bliver så præcis som mulig. Side 6 af 22
3.1 Lineær Da vi ikke kunne finde en bredde på det nederste stykke, har vi selv valgt den til at være 2,5 cm i radius, ud efter billeder af lignende whisky glas. Ligeledes er hældningen også selvvalgt. Ved at bruge den rette linjes ligning:, får vi vores ligning for det linærer stykke: Vi har valgt at dette stykkes interval skal gå fra til. Igen, dette er en selvvalgt dimension. Definitionsmængde bliver altså: Koordinaterne til endepunktet skal bruges til fundet af den næste kurve. Vi sætter derfor ind i funktionen g og finder koordinaterne: Punktet bliver altså (2,5 ; 1,25) g(x) 3.2 Første trigonometriske stykke Til denne trigonometriske figur, skal vi finde en del ukendte værdier som skal bruges for at figuren både passer med den første funktion, og passer med de fundne dimensioner. Hertil vil vi anvende en sinuskurve. Valget mellem sinus eller cosinus er udelukkende faldet ved en tilfældighed da disse i udgangspunkt har samme form. Vi bruger altså følgende: Hvor: Amplitude (hvor høje bølgerne er) Omega (bølgelængde) Phi (forskydning på x-aksen) Da vores diameter på den maximale bredde er 6,985 cm, vil vores radius, som også vil være vores amplitude, være Vi har så fundet frem til at omega på 0,5 vil passe godt til figuren. Vi har så: Side 7 af 22
Fundet af skal nu forskyde kurven, så den passer rigtigt på den lineær kurve. Vi sætter punktet vi fandt tidligere ind i funktionen og sætter som den ukendte: h(x) Vi har nu føres endelige udtryk for funktionen g: For at finde definitionsmængden, skal vi finde frem til ekstremumspunktet hvor kurven skal slutte. Derfor vil vi nu differentiere udtrykket. Til det bruger vi følgende regler: Vi differentierer: Sammensatte funktioner : ( ) Sinus : Konstanter 1 : Konstanter 2 : Vi sætter den nu til 0 og isolerer x: Definitionsmængden skal så være: 3.3 Sidste trigonometriske stykke Til denne bruger vi igen: Vi har tænkt os at gøre så ekstremo punkterne bliver både start og slut, og at intervallet vil blive en halv bølgelængde. Dette gør det let at lave radius for enden og længden af glasset til den ønskede værdi. Side 8 af 22
Vi finder først amplituden. Da kurven skal sidde mellem maksimaltykkelse og tykkelse for enden, kan vi finde tykkelsen af kurven: Vi kan nu finde amplituden, hvilket er det halve af tykkelsen: Vi har nu amplituden: Vi kan nu finde omega. Vi ved at hvor T er er længden på perioden. Ud fra vores definitionsmængder, ved vi at bølgelængden er 6,52. Perioden bliver så: Vi finder på omega med formlen: Funktionen kommer dermed til at lyde: i(x) Side 9 af 22
Vi finder nu på samme måde som før, ved at sætte punktet for enden af sidste kurve ind i ligningen, men hvor y-værdien er amplituden, da kurven ikke kan ramme den tidligere kurves endepunkt uden en konstant som flytter den op ad y-aksen: Vi finder nu konstanten til at flytte den op ad y-aksen, så den rammer punktet. Vi sætter den sammen til en ligning: Vores endelige udtryk er nu: Med definitionsmængden 3.4 Gaffelfunktion Nu da vi har alle udtrykkene, kan vi sætte det sammen til en gaffelfunktion: { } Graf, hvor skilninger mellem de forskellige dele er afmærket med grønne linjer. Side 10 af 22
4 Omdrejningslegemet og dets volumen For at beregne den 3-dimensionelle figurs volumen, drejes graferne for tværsnittet om x-aksen i det retvinklede koordinatsystem. Følgende regneregler om volumen af et omdrejningslegeme anvendes: Hvor at: : Volumen af omdrejningslegemet. og : Intervallet mellem og. : funktionsudtrykket for grafen, der drejes om x-aksen. Da i dette tilfælde er en gaffelfunktion, kan ikke indsættes i udtrykket ad én gang, da der jo er tale om flere forskellige funktioner. Volumen af omdrejningslegemet udregnes derfor for alle tre udtryk, hvorefter de tre værdier summeres for at finde den samlede volumen. 4.1 Volumen af er en lineær funktion og vil derfor skabe en keglestub, når grafen drejes om x-aksen. blevet Side 11 af 22 Figur 1 - Omdrejningslegemet af g x
tidligere fundet, men for overskuelighedens skyld stilles det op igen: Definitionsmængden blev fundet i afsnittet Udtryk for figur. Oplysningerne indsættes i udtrykket for volumen af et omdrejningslegeme og der fås: Resultatet kan afrundes til summeres., men det vedholdes som eksakt værdi indtil alle tre rumfang Resultatet eftervises på programmel, som viser at resultatet er korrekt. 4.2 Volumen af er en trigonometrisk en sinus funktion. funktion, nærmere betegnet Udtrykket: Figur 2 - Omdrejningslegemet af h x omdrejningslegeme: Ligesom før indsættes oplysningerne i udtrykket for volumen af et Resultatet eftervises på programmel, som viser at det er korrekt. Side 12 af 22
4.3 Volumen af Drejes om sig selv fås nedenstående figur. Figur 3 - Omdrejningslegemet af x Oplysningerne indsættes igen i udtrykket for omdrejningslegemer og der fås: Side 13 af 22
4.4 Volumen af, total volumen I de foregående 3 afsnit blev volumen af omdrejningslegemerne for, og fundet og da { } lægges de tre volumener samme for at få det totale volumen af. Figur 4 Omdrejningslegemet for f x Side 14 af 22
5 IT produkt 5.1 Kravsspecifikation Følgende krav gælder for IT produktet: Produktet udvikles i POV-Ray. Programmet indeholder adskillige redskaber til at skabe scener ved hjælp af et tredimensionelt miljø, hvorfor POV-ray er det mest optimale valg fremfor vpython. Produktet er en præcis illustration af omdrejningslegemet for. Den 3-dimensionelle figurs dimensioner skal stemme overens med dimensionerne gaffelfunktionen. Dvs. at figuren skal dimensioneres efter målene for et Glencairn whiskey glas. Figuren er gennemsig. Da den valgte figur er et glas, skal figuren være gennemsigtig, dog skal figurens kanter naturligvis stadigvæk være tydelige. Figuren har en omgivelse. Figuren skal stå i en omgivelse (på en plan med himmel omkring) for at simulere fysiske rammer. Figur 5 - http://www.tjhsst.edu/~dhyatt/superap/povray.html 5.2 Værktøjer Figuren skal modelleres i POV-Ray, da programmet gør det muligt at dreje en todimensionel kurve om en akse, dette kaldes i POV-Ray for et lathe objekt 3. vpython har et lignende værktøj kaldet extrusion 4, men dette gør det kun muligt at dreje en figur om en akse. POV-ray er et værktøj til at tegne 3-dimensionelle figurer og/eller scener ved hjælp af ray-tracing 5. Som det fremgår af kravene overover, skal figuren være gennemsigtig, idet der er tale om et gennemsigtigt glas (se evt. billederne i afsnit 2 Valg af figur ). Kanterne på glasset skal naturligvis være tydelige, så 3 http://www.povray.org/documentation/3.7.0/t2_3.html#t2_3_1_1 - Lathe object, POV-Ray 4 http://vpython.org/contents/docs/extrusion.html - Extrusion, vpython 5 https://www.princeton.edu/~achaney/tmve/wiki100k/docs/ray_tracing_(graphics).html Ray tracing Side 15 af 22
figuren ikke går i ét med baggrunden. Dette sikres ved at tilføje lys ved hjælp af light source 6 objektet (teknisk set ikke et objekt, se fodnote 6). Figurens omgivelse tilføjes i form af en plan og en himmel omkring. Det opnås ved henholdsvis plane objektet og sky_sphere 7 objektet. Figuren kan i princippet modelleres ved hjælp af sor 8 objektet, men da undervisningen forinden projektet har haft lathe i fokus anvendes dette frem for sor objektet. 6 http://www.povray.org/documentation/3.7.0/r3_4.html#r3_4_4_1 - Light source object, POV-Ray 7 http://www.povray.org/documentation/3.7.0/t2_3.html#t2_3_6_2 Sky_sphere, POV-Ray 8 http://www.povray.org/documentation/3.7.0/r3_4.html#r3_4_5_1_15 sor, POV-Ray Side 16 af 22
6 Implementering 6.1 Omgivelser Først vil vi lave en sol, eller lys kilde, så vi kan se vores objekt. Dette gør vi med følgende kommando: light_source{< 3000,3000,-3000> color White} Vi sætter altså en lys kilde (light_source), ved koordinaterne hvidt. Det næste vi gerne vil have er en himmel og plan. Til det bruger vi følgende kommandoer: sky_sphere { pigment { gradient <0,1,0>color_map { [0.00 rgb <0.6,0.7,1.0>] [0.35 rgb <0.1,0.0,0.8>][0.65 rgb <0.1,0.0,0.8>][1.00 rgb <0.6,0.7,1.0>] } scale 2 } } Her laver vi baggrunden (eller himlen) ud af en farve række. Vi laver nu planen: plane{ <0,1,0>, 0 texture{ pigment{ color Gray} { bumps 0.75 scale 0.1}finish { phong 0.1}} } Vi laver altså en plan så x og z akserne, som har farven grå. 6.2 Nederste bund Til bunden af glasset, bruger vi kommandoen lathe med linear_spline. Lathe objektet er et objekt, hvor man giver den nogle 2D koordinater (x,y), som den så laver linjer imellem. Bevægelsen af disse linjer er forskelligt alt efter hvilken type lathe man vælger. Med linear_spline laver den rette linjer mellem hver af punkterne. Derefter, for alle lathe objekter, bliver, som lyser linjerne drejet 360 grader så man får et 3D objekt. Koden ser sådanne ud: Et render af bunden lathe{ linear_spline 2, < 2.5,0 >, < 1.25, 2.5 > texture{ pigment{ color rgb<1,0.5,0.5,0.5 } photons { target refraction on reflection on collect off } scale<1,1,1>*1 } 6.3 Sinus kurve Her har vi brugt cubic_spline. I modsætning til linear_spline, laver cubic_spline linjer mellem punkterne til en glidende bevægelse. Cubic_spline bruger også ydre punkterne som hældning for dem der kommer før. Ilustration af cubic_spline Kilde: http://www.povray.org/documentation/ view/3.6.2/60/ Side 17 af 22
6.4 Finjustering Vi vil nu gøre modellen til glas. På nettet har vi så fundet et eksempel på et glasmateriale som vi vil bruge, samt indstillinger til omgivelser. 6.6 Delkonklusion På baggrund af kravsspecifikationen kan der nu føres eftersyn: Produktet udvikles i POV-Ray. o Udført. Produktet er en præcis illustration af omdrejningslegemet for. o Vi har brugt enkelte punkter fra kurverne, og ikke fuld præcision som følger hele funktionen. Figuren er gennemsig. o Udført. Figuren er lavet af glas. Figuren har en omgivelse. o Udført. Figuren har himmel, plan og lyskilde. Det ville have været muligt at lave en mere præcis model ved hjælp af sor objektet (se afsnit 4.3 Værktøjer ). Det ville dog også have været muligt at tilføje flere punktet til lathe objektet for at fremskaffe en mere præcis model, men det vurderedes at den ovenstående model lever op til kravet i en tilfredsstillende forstand. Af den grund ses der bort fra kravet om at produktet er en præcis illustration af omdrejningslegemet for. Denne type modelleringsarbejde kan eventuelt anvendes til at skabe 3D modeller som arbejdstegninger til 3D printere. Side 18 af 22
7 Konklusion På baggrund af arbejdet med dette projekt kan der konkluderes at: Tværsnittet af et Glencairn whiskyglas kan illustreres i et retvinklet koordinatsystem ved hjælp af gaffelfunktionen { }. Grafen for tværsnittet indeholder desuden en flydende overgang, et punkt på grafen, hvor to funktioner har samme tangenthældning. Arealet af omdrejningslegemet er. Omdrejningslegemet af kan tegnes i POV-Ray ved hjælp af lathe objektet, se figuren til højre. Den valgte figur og de dertilhørende udregninger vurderes til at være tilfredsstillende idet projektoplæggets krav, samt egne krav, er opfyldt. Dog kunne koden til POV-Ray godt forbedres ved at tilføje flere punktet, så modellen mere præcist fuglte kurvens bevægelse. Side 19 af 22
7.1 Evaluering af gruppearbejde Gruppearbejdet er som udgangspunkt foregået på skolen i det tildelte matematik- og IT-moduler. Det eneste hjemmearbejde har været det afsluttende arbejde vedrørende samling af de forskellige afsnit og korrekturlæsning deraf. Det er en delt holdning i gruppen, at arbejdet har været lige delt mellem parterne, samt at resultaterne er opfyldt i en tilfredsstillende forstand. 7.2 Evaluering af pair programming Pair programming blev anvendt under arbejdet med 3D modelleringen af whiskyglasset i POV-Ray. Det viste sig at være yderst fordelagtigt, idet langt de fleste småfejl blev fanget og løst langt hurtigere på grund af den fordoblede tankevirksomhed. Det viste sig at punktfejl ofte blev løst før at modellen blev renderet, da denne blev fanget i samme øjeblik at fejlen opstod i koden. En ulempe ved metoden oplevedes dog, da parterne ikke havde samme erfaring og kendskab til det anvendte sproget. Derved kan det ene af parterne ikke spæde til med en lige så stor andel. På baggrund af denne observation kan det konkluderes at metoden er mest effektiv såfremt parterne har nogenlunde samme baggrundsviden og erfaring med det pågældende sprog. Side 20 af 22
8 Bilag 8.1 POV-Ray kildekode Side 21 af 22
Side 22 af 22