Projekt: Avedøre værket

Relaterede dokumenter
10/11/2013 Avedøreværket. Matematik og IT. Mikkel G, Erik, Alexander og Mathias ROSKILDE HTX KLASSE 3.4

VEKTOR I RUMMET PROJEKT 1. Jacob Weng & Jeppe Boese. Matematik A & Programmering C. Avedøre-værket. Roskilde Tekniske Gymnasium 3.4. Fag.

Avedøre-værket i rotation

Michael Jokil

Vektorer i 3D. 1. Grundbegreber. 1. Koordinater. Enhedsvektorerne. Vektor OP. De ortogonale enhedsvektorer kaldes for: Hvis punkt p har koordinaterne:

Afstande, skæringer og vinkler i rummet

Afstande, skæringer og vinkler i rummet

Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over. , og et punkt er givet ved: P (2, 1).

HTX, RTG. Rumlige Figurer. Matematik og programmering

Matematik A, STX. Vejledende eksamensopgaver

Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over. 1, og et punkt er givet ved: (2, 1)

VEKTORGEOMETRI del 2 Skæringer Projektioner Vinkler Afstande

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

Matematik A STX 18. maj 2017 Vejledende løsning De første 6 opgaver løses uden hjælpemidler

Vektorregning. Vektorer som lister

Løsninger til eksamensopgaver på A-niveau 2017

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

Aalborg Universitet - Adgangskursus. Eksamensopgaver. Matematik B til A

VEKTORGEOMETRI del 2 Skæringer Projektioner Vinkler Afstande

Højere Teknisk Eksamen maj Matematik A. Forberedelsesmateriale til 5 timers skriftlig prøve NY ORDNING. Undervisningsministeriet

Matematik A STX december 2016 vejl. løsning Gratis anvendelse - læs betingelser!

Besvarelser til Calculus og Lineær Algebra Globale Forretningssystemer Eksamen - 3. Juni 2014

Delmængder af Rummet

Matematik A-niveau STX 24. maj 2016 Delprøve 2 VUC Vestsjælland Syd.

Visualiseringsprogram

Besvarelser til Calculus og Lineær Algebra Globale Forretningssystemer Eksamen - 8. Juni 2015

GUX. Matematik. A-Niveau. Torsdag den 31. maj Kl Prøveform a GUX181 - MAA

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

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

Vektorfunktioner. (Parameterkurver) x-klasserne Gammel Hellerup Gymnasium

For at få 3D-kommandoer til at virke skal AutoCAD LT 2002 først sættes op Vælg Start->Programmer->BYG-CAD>LTSetup

IT og Programmering eksamens projekt

Matlab script - placering af kran

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

Programmering C RTG

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

Matematikken bag Parallel- og centralprojektion

Temaopgave: Parameterkurver Form: 6 timer med vejledning Januar 2010

Matematik A. Højere teknisk eksamen

Klasse 1.4 Michael Jokil

Optimale konstruktioner - når naturen former. Opgaver. Opgaver og links, der knytter sig til artiklen om topologioptimering

Vektorer og lineær regression

MATEMATIK ( 5 h ) DATO: 5. juni 2008 (formiddag) Lommeregner hverken grafisk eller programmerbar

Bedste rette linje ved mindste kvadraters metode

Beregning til brug for opmåling, udfoldning og konstruktion

Vektorer og lineær regression. Peter Harremoës Niels Brock

Matematik A. 5 timers skriftlig prøve. Højere Teknisk Eksamen i Grønland maj 2009 GLT091-MAA. Undervisningsministeriet

Dokumentation af programmering i Python 2.75

Delmængder af Rummet

3D-grafik Karsten Juul

Projekt 3.1 Pyramidestub og cirkelareal

Matematik A. Studentereksamen

Matematik A-niveau STX 1. juni 2010 Øvelse DELPRØVE 1 & DELPRØVE 2

Anvendelse af matematik til konkrete beregninger

Matematik A. Prøvens varighed er 5 timer. Alle hjælpemidler er tilladt. Ved valgopgaver må kun det anførte antal afleveres til bedømmelse.

7. Rumgeometri med Derive

Matematik A. Studentereksamen

Matematik A August 2016 Delprøve 1

Kommentarer til den ægyptiske beregning Kommentarer til den ægyptiske beregning... 5

Du skal lave en tegning af bordet set lige på fra alle sider (fra langsiden, den korte side, fra oven og fra neden - 4 tegninger i alt).

Matematik A 5 timers skriftlig prøve

ALLAN BOHNSTEDT BERNT HANSEN MICHAEL JENSEN KLAUS MARTHINUS MAT A

MATEMATIK A-NIVEAU. Kapitel 1

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)

gl. Matematik A Studentereksamen

Vektorer og rumgeometri med. TI-Interactive!

Matematik A. Studentereksamen

Q (0, 1,0) MF(161): y a( x) y b( x) har løsningen: y e b( x) bx ( ) e dx e e dx e dx e. y e 8e. Delprøve uden hjælpemidler: kl

Besvarelser til Lineær Algebra og Calculus Globale Forretningssystemer Eksamen - 6. Juni 2016

Analytisk Geometri og Vektorer

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 A. Indhold. 92 videoer.

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

Gratisprogrammet 27. september 2011

DENNE LILLE MANUAL TIL GEOGEBRA DÆKKER NOGENLUNDE DE EMNER, DER VEDRØRER FOLKESKOLEN TIL OG MED 10. KLASSE.

D = 0. Hvis rører parablen x- aksen i et enkelt punkt, dvs. den tilhørende andengradsligning

DANMARKS TEKNISKE UNIVERSITET

Kompendium i faget. Matematik. Tømrerafdelingen. 2. Hovedforløb. Y = ax 2 + bx + c. (x,y) Svendborg Erhvervsskole Tømrerafdelingen Niels Mark Aagaard

Det skrå kast, en simulation

Matematiske hjælpemidler. Koordinater. 2.1 De mange bredder.

VUC Vestsjælland Syd, Slagelse Nr. 1 Institution: Projekt Trigonometri

1. Bevægelse med luftmodstand

Kasteparabler i din idræt øvelse 1

MATEMATIK ( 5 h ) DATO: 8. juni 2009

Matematik. Meteriske system

Matematik A. Studentereksamen. Tirsdag den 24. maj 2016 kl Digital eksamensopgave med adgang til internettet. 1stx161-MATn/A

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

Matematik A. Studentereksamen. Forsøg med digitale eksamensopgaver med adgang til internettet

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

Vi begynder med at repetere noget af det tidligere gennemgåede som vi skal bruge.

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

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

Matematik A. Studentereksamen

Ligningsløsning som det at løse gåder

Matematik A Terminsprøve Digital prøve med adgang til internettet Torsdag den 21. marts 2013 kl indd 1 20/03/12 07.

VUC Vestsjælland Syd, Slagelse Nr. 2 Institution: Projekt Vejanlæg. Matematik B-niveau Differentialregning

Transkript:

Projekt: Avedøre værket Matematik delen På billedet ses en kedelbygning. Bygningen er en pyramidestub med kvadratisk grundflade, hvis kantlængde AB=BC=40m. Pyramidestubbens 4 sider danner samme vinkel med grundplanen. Pyramidestubben er placeret i et 3-dimensionalt koordinatsystem med grundfladen i xy-planen, hvor hjørnepunkterne A=(40,0,0) og C(0,40,0). Forlængelses af pyramidestubbens skrå kanter ender i en spids, P=(20,20,80). Pyramidestubbens øverste flade er skrå. På den kant, der er parallel med stykket AB, er punkt D=(,,38). På den modsatte kant er punkt E=(,,42). Punkterne A,B og D er beliggende i planen a. På pyramidestubben ses en kasseformet udbygning. En af skæringslinjerne mellem denne og pyramidestubben udgøres af stykket FG. Punkterne F=(20,28,0) G=(,28,25) H=(40,28,22) er beliggende i planen. To udluftningsrør, som går gennem en udskæring i taget, har samme diameter, D=700 mm. Opgave analyser a) Bestem koordinatet til punkt B, i grundfladen. Planen er kvadratisk, dette vil sige: =. 1

Vi har 3 vektorer: A=, =, C=. Fra punktet A til B, bliver det tilbagelagt en strækning på y aksen, de har samme x koordinat, og der er ingen ændring i z koordinat. Derfor må =, det samme kan siges om afstanden mellem punkterne B til C. her foregår kun en bevægelse på x retningen derfor er =. vil da det er en plan være lig med, og disse 2 koordinater har samme værdi. Dette giver os: = b) Opstil en parameterfremstilling for den linje, der går gennem B og P. For at opstille en parameterfremstilling for BP, kræves det at man kender en retningsvektor samt et punkt. Retningsvektoren kan opstilles således: == Vi kender 2 punkter, vi bruger punktet B til at opstille parameterfremstilling. Parameterfremstillingen for linien er derfor: = + c) Bestem koordinaterne til punkt D. Punktet D=, hvor vi kender. Punktet D er beliggende i vores parameterfremstilling, som blev fundet i forrige opgave: = + Da vi kender punktet kan vi stille der overfor + ( ): = + ( ) 2

Vi kan løse denne i forhold til tiden t, og finde den t værdi hvor dette udsagn er sandt. Denne t værdi,, indsætter vi i parameterfremstillingen: = +. Vi kan nu udregne koordinaterne til punktet D. d) Opstil en ligning for planen a. Vi er interesserede i at opstille en ligning på normalform for planen. For at fremstille en ligning på normalform skal vi bruge et fast punkt, samt en normalvektor til planen. Vi har 3 punkter i planen som vi kender koordinaterne til, A,B og D En normalvektor findes ved at tage krydsproduktet af 2 vektorer. Vi laver 2 vektorer,, og, som vi kan finde krydsproduktet af. =, = Vi kan herefter finde krydsproduktet: =,, = = = Vi har nu en normalvektor, og et punkt A(kunne være alle punkter, vi bruger bare A), og kan fremstille ligningen på normalform: + + +( )=0 Vi finder også parameterfremstilling for planen da denne skal bruges i senere opgaver: I planen a kender vi 3 punkter, A,B og D. VI kan derfor fremstille en parameterfremstilling således: = + + e) Beregn vinklen mellem en af pyramidestubbens skrå sider og grundplanen xy. 3

For at finde vinklen mellem 2 planer, skal man finde vinklen mellem normalvektoren for de 2 planer. Jeg kender normalvektoren for planen a,, og skal finde en normalvektor for planen xy. Da planen xy, kun er udspændt på x og y aksen, og ingen højde har (z), vil en normalvektor for en xy plan, altid være: 0 = 0, hvor c er en vilkårlig værdi der ikke er 0, vil altid stå vinkelret på planen xy. Når vi har de 2 normalvektorer kan vinklen mellem planerne findes ved formlen: =cos ( ) h:=180 cos ( ) f) Opstil en ligning for planen På planen ligger 3 punkter, H,F og G. Vi kender koordinaterne til punkterne H og F, og vi kender y og z koordinaterne for punktet G. Punktet G, er beliggende i planen a, vi har tidligere fundet parameterfremstillingen for dette punkt, og denne kan vi bruge til at beregne x koordinatet til H. + + = Vi kender vi kan derfor opstille 2 ligninger med 2 ubekendte: = + ( )+ ( ) = + ( )+ ( ) Vi kan ved at løse disse 2 ligninger finde s og t, som vi kalder,, og. Vi kan nu indsætte og finde x koordinatet til punktet H. = + ( )+ ( ) Jeg kender nu 3 punkter i planen og kan lave planens ligning på normalform. Finder planens ligning på normalform, fremgangsmåden vil være som i opgave D. Starter med at lave 2 vektorer: = 4

= Finder krydsproduktet: =,, = = = Vi har nu en normalvektor, og et punkt H, og kan fremstille planens ligning på normalform: + + +( )=0 g) Beregn vinklen mellem a og Vinklen mellem de 2 planer findes som i opgave e. =cos h:=180 cos h) Opstil en parameterfremstilling for skæringslinjen mellem a og. Vi har 2 parameter fremstillinger: a: + + + =0 h =( ) : + + + =0 h =( ) Skæringslinjen kan så bestemmes udfra: ( ) + = ( ) + i) Beregn arealet af den del af planen, der afgrænses af punkterne F,G og H. F,G og H udspænder et halvt parallelogram, vi kan derfor finde arealet de udspænder ved at finde krydsproduktet mellem og så vi får en normalvektor, længden af normalvektoren gange med en halv er arealet. 5

I tidligere opgaver fandt vi normalvektoren og denne var: = = Vi kan nu finde arealet: Areal= = Areal=( + + ) j) Beregn længden af storaksen til den ellipse, der udgør en udskæring til et af rørene i taget. Stor aksen kan findes ud fra følgende formel: 2= Hvor D er cylinderen diameter, er retningsvektoren for cylinderen, og er normalvektoren for planen der skærer cylinderen. 0 Retningsvektoren for cylinderen, vil grundet at cylinderen kun bevæger sig på z aksen, være = 0 hvor er et positivt tal. Vi skal får at beregne snitfladen finde øverste plans normalvektor, til dette skal der bruges 3 punkter. D,E og punktet J, vi kalder denne flade for q. 6

Koordinaterne til D er beregnet tidligere. E Kan beregnes ved at lave en parameterfremstilling for linjen CP, hvorpå E vil være et punkt derpå: Retningsvektoren kan opstilles således: == Vi kender 2 punkter, vi bruger punktet C til at opstille parameterfremstilling. Parameterfremstillingen for linien er derfor: = + Punktet E er beliggende på linjen, kan nu finde punktet E=, da er kendt, kan man stille den overfor + ( ). Derved kan man finde tiden og finde de resterende koordinater til E: = + ( ) Løses for t, og Indsætter i linjens parameterfremstilling. = + Derved har man fundet koordinaterne til punktet E. Derefter skal koordinaterne til J findes, grundet at JD er parallel med AB, ved vi at =. Punktet J ligger på linjen AP, derfor skal en parameterfermstilling for denne linje findes som før. Finder retningsvektoren: == Finder parameterfremstillingen, bruger punktet A. = + Punktet J er beliggende på linjen AP, finder derfor tiden som tidligere. 7

= + ( ) Isolerer t og finder. æ nu i parameterfremstillingen for linjen. = + Har nu 3 punkter, og kan derved finde normalvektoren for planen som de udspænder ved at lave 2 retningsvektorer, og derefter finde krydsproduktet af dem. Starter med at lave 2 retningsvektorer: = = Finder krydsproduktet: =,, = = Vi har nu og kan beregne storaksen: 2= = == Man indsætter retningsvektoren for cylinderen som er fundet, samt normalvektoren for planen som er fundet, samt diameteren for cylinderen som er opgivet i opgaven. Beregninger a) Bestem koordinatet til punkt B, i grundfladen. Længden af = =40 40 0 =0, =40 0 0 8

Vi bruger formlen vi har fra analysen: Punktet B har koordinaterne: 40 0 40 =40 0=40 0 0 b) Opstil en parameterfremstilling for den linie, der går gennem B og P. 40 20 =40, =20 0 80 Bruger formlerne vi udledte i analysen: 20 40 20 == 20 40= 20 80 0 80 Parameterfremstillingen for linjen der går gennem B og P. 40 20 =40+ 20 0 80 c) Bestem koordinaterne til punkt D. = 38 Finder først tiden t: 38=0+ (80) t=0,475 Kan nu finde alle punkter i D: 40 20 30,5 ==40+0,475 20=30,5 0 80 38 d) Opstil en ligning for planen a. 40 40 30,5 =0,=40,=30,5 0 0 38 9

40 40 0 = 40 0=40 0 0 0 30,5 40 9,5 = 30,5 0=30,5 38 0 38 = 40 0 30,5 38,0 0 0 40, 38 9,5 9,5 30,5 40 38 30,5 0 1520 = 0 9,5 38 0 = 0 = 0 30,5 ( 9,5) 40 380 Planens ligning på normalform: 1520 +0 +380 +( 1520 40 0 0 380 0)=0 1520 +0 +380 60800=0 Planens parameterfremstilling 40 0 9,5 =0+ 40+ 30,5 0 0 38 e) Beregn vinklen mellem en af pyramidestubbens skrå sider og grundplanen xy. Finder vinklen mellem a og xy. 1520 = 0 380 0 = 0 1 Vinklen mellem planerne: =cos ( ) =cos 380 ( 1566,78 )=75,96 f) Opstil en ligning for planen. 10

40 40 Vi har 3 punkter: =28,=28=28 0 25 22 Finder først, skal først finde t og s, bruger solve: 28=0+ (40)+ (30,5) 25=0+ (0)+ (38) s=0,198 t=0,658 Kan nu finde =40+0,198 (0)+0,658 ( 9,5)=33,75 33,75 = 28 25 Finder 2 retningsvektorer, 40 40 0 = 28 28= 0 0 22 22 33,75 40 6,25 = 28 28 = 0 25 22 3 Finder krydsproduktet = 0 22 0 3, 22 0 3 6,25, 0 0 6,25 0 0 3 0 22 0 = 22 6,25 3 0=137,5= 0 0 ( 6,25) 0 0 Finder ligningen for planen på normalform, bruger punktet H. 0 +137,5 +0 +( 0 40 137,5 28 0 22)=0 0 +137,5+0 3850=0 g) Beregn vinklen mellem a og 1520 = 0 380 11

0 =137,5 0 Vinklen findes som i opgave e., =cos, =cos, =cos (0)=90 h) Opstil en parameterfremstilling for skæringslinjen mellem a og. De 2 planers ligning på normalform: a: 1520 +0 +380 60800=0 : 0 +137,5+0 3850=0 Kan nu finde skæringslinjen: = = ( ), + () (), (, ), +, () (), 0 + (), (, ), +, (), = 28 4 +160 i) Beregn arealet af den del af planen, der afgrænses af punkterne F,G og H. Vi har tidligere fundet normalvektoren for planen, der skal bruges til at beregne arealet: 0 =137,5 0 =137,5 12

=68,75 j) Beregn længden af storaksen til den ellipse, der udgør en udskæring til et af rørene i taget. Starter med at finde punktet E=. 42 0 20 Finder retningsvektoren CP, C=40,=20: 0 80 20 0 20 == 20 40= 20 80 0 80 Opstiller nu parameterfremstillingen udfra punktet C. 0 20 =40+ 20 0 80 Finder nu : 42=0+ 80 =0,525= Indsætter i parameter fremstillingen: 0 20 10,5 =40+0,525 20=29,5 0 80 42 Finder nu J= 38 40 Opstiller retningsvektor for AP, A=0. 0 20 40 20 = 20 0= 20 80 0 80 Opstiller nu parameterfremstillingen udfra punktet C. 40 20 =0+ 20 0 80 Finder nu : 13

38=0+ 80 = =0,475 Indsætter i parameterfremstillingen. 40 20 30,5 =0+0,475 20 =9,5 0 80 38 30,5 Vi har derved alle 3 punkter, D er fundet tidligere og er: =30,5 38 Starter med at lave 2 vektorer: 10,5 30,5 20 = 29,5 30,5= 1 42 38 4 30,5 30,5 0 =9,5 30,5= 21 38 38 0 Finder krydsproduktet af de 2 vektorer. = 1 4 20 1,4, 20 21 0 0 0 0 21 1 0 (21) 4 = 4 0 0 20 20 21 0 1 = 84 0 420 0 Retningsvektoren for cylinderen har vi givet koordinaterne = 0 5 Diameteren for cylinderen er 700 mm=0,7m Kan nu finde storaksen: 2=, 2= 1499,11 2100 2=0,714m=storakse 14

Konklusion Modellering i programmeringsdelen er sket på baggrund af de punkter udregnet i denne del. Et billede af den endelige modellering ses til højre, og ud fra dette må man kunne konkludere at punkterne er korrekt udregnet, eftersom modellering ser ud som i oplægget. 15

Modellering af Avedøre værket Formål Formålet med dette projekt er at modeller Avedøre værket, hvor de matematiske punkter er beregnet i matematik delen af projektet. I forhold til projektoplægget var succeskriteriet at få modelleret værket, tilføjet en kugle på siden af værket, samt beregne snitfladens areal mod planen, og tilføje noget bevægeligt, dog syntes vi at det kunne være interessant at give brugeren mulighed for at interagere med programmet i form af brugerindtastet data. Derfor vil vi udover at modellere værket, også fokusere på følgende: Få røg til at komme op af skorstenen på værket, hvor brugeren bestemmer hastigheden deraf. Give brugeren mulighed for at se værket med og uden kuglen i siden på værket. Beskrivelse af kerneproblemer For at løse dette projekt på baggrund af formålsafsnittet, så er der følgende kerneproblemer der skal løses: Modelleringen af Avedøre værket Få værkets skorsten til at ryge og lade brugeren angive hastigheden Gøre det muligt at skjule kuglen på siden af værket Modelleringen af Avedøre værket For at kunne modellere Avedøre værket vil det kræve kendskab til hvilket objekt i vpython der er bedst egnet til at tegne skrå flader. Få værkets skorsten til at ryge og lade brugeren angive hastigheden Kerneproblemet her er at modellere et bevægeligt objekt og derefter angive dens retning, samt lade brugerinput påvirke dens hastighed. Gøre det muligt at skjule kuglen i siden på værket Kerneproblemet her er lade brugerinput påvirke synligheden af kuglen, dvs. om den er synlig eller usynlig. Denne proces skal kunne gå begge veje. User stories Formålet med user stories er at beskrive brugernes forventninger til programmet. User stories er en god og effektiv måde at håndtere brugerens forventninger og krav til, idet det er holdt på et simpelt niveau. Da dette projekt var forholdsvist simpelt er der kun en enkel user story associeret med programmet 16

Se en 2D renderering af et 3D objekt. Når inputs er givet køres renderingen indtil programmet lukkes Programmet Use case diagram Programmet har to funktioner som brugeren kan benytte sig af. Det kan renderere en model af Avedøre værket, samt udregne snitfladens areal mellem kugle og plan. På baggrund af dette er følgende use case diagram fremstillet: Program kode For nemmere at kunne bruge koden til praktiske eksempler skrives den her, i forhold til et bilag. # -*- coding: cp1252 -*- from visual import * import random from time import * from math import * class main(): #Forklaring og indsamling af data til at starte programmet print "------------------------------------------------------" print "Dette program er lavet til at modellere Avedøre værket" print "Af Casper, Christian og Mikkel 3.4" print "------------------------------------------------------" print "Sådan navigerer du rundt i vpython:" print " - Hold højre museknap inde for at dreje" print " - Hold begge museknapper inde for at zoome ind og ud ved at bevæge musen frem eller tilbage" print "" print "Der er indtegnet en kugle i det ene plan - tryk på tasten F for at fjerne den, og V for at vise den igen" print "Teksten ang. arealet af snitfladen fjernes og vises på samme måde" print "" print "Indtast et tal fra 0.001 til 1 (0.2 giver det bedste resultat) for at indikere, " dt = float(raw_input("hvor hurtigt røgen fra skorstenen skal bevæge sig: ")) print "" print "Den nødvendige data er indtastet, og programmet vil starte om 3 sekunder" sleep(3) if (dt): #Hvis dt eksisterer, dvs. om den er indtastet, så kører resten af programmet scene = display(title='modellering af Avedøre værket', width=600, height=600, background=(1,1,1), autoscale = false) #Avedøre værket convex(pos=[(0,0,0),(40,0,0),(40,0,40),(0,0,40),], color=color.gray(0.5)) convex(pos=[(0,0,40),(9.5,38,30.5),(30.5,38,30.5),(40,0,40),], color=color.gray(0.5)) convex(pos=[(40,0,40),(30.5,38,30.5),(29.5,42,10.5),(40,0,0),], color=color.gray(0.5)) convex(pos=[(0,0,0),(10.5,42,10.5),(9.5,38,30.5),(0,0,40),], color=color.gray(0.5)) convex(pos=[(0,0,0),(10.5,42,10.5),(29.5,42,10.5),(40,0,0),], color=color.gray(0.5)) convex(pos=[(30.5,38,30.5),(29.5,42,10.5),(10.5,42,10.5),(9.5,38,30.5)], color=color.gray(0.5)) #Den grønne del convex(pos=[(28,0,40),(28,25,33.75),(28,22,40)], color=color.green) convex(pos=[(12,0,40),(12,25,33.75),(12,22,40)], color=color.green) convex(pos=[(12,0,40),(28,0,40),(28,22,40),(12,22,40)], color=color.green) convex(pos=[(28,22,40),(12,22,40),(12,25,33.75),(28,25,33.75)], color=color.green) #akser pointer = arrow(pos=(0,0,0), axis=(50,0,0), shaftwidth=0.2, color=color.red) pointer = arrow(pos=(0,0,0), axis=(0,50,0), shaftwidth=0.2, color=color.green) pointer = arrow(pos=(0,0,0), axis=(0,0,50), shaftwidth=0.2, color=color.blue) #Skorstenen på Avedøre værket cylinder(pos=(15,0,15), axis=(0,46,0), radius=0.7) 17

cylinder(pos=(15,0,18), axis=(0,46,0), radius=0.7) #Kuglen i planet kugle = sphere(pos=(25,35,35), radius=4) #label der beskriver arealet af snitfladen på planet #udregninger x_0=35.0 y_0=25.0 z_0=35.0 r=4.0 a=1520.0 b=0.0 c=380.0 d=-60800.0 t=-(c*z_0+b*y_0+a*x_0+d)/(c**2+b**2+a**2) x1=x_0+t*a y1=y_0+t*b z1=z_0+t*c r_midlertidig=(r**2-((x_0-x1)**2+(y_0-y1)**2+(z_0-z1)**2)) if r_midlertidig<=0: do_nothing = 1 #ingenting sker dette er en sikkerheds anording, hvis værdier ændres #Da man ikke kan tage kvadrotroden af et negativt tal else: r_snitflade=sqrt(r_midlertidig) a_snitflade=pi*(r_snitflade**2) tekst = "Arealet af snitfladen mellem kugle og plan er "+str(a_snitflade)+"m^2" textlabel = label(pos=(40,40,40), text=tekst) while 1: #Uendelig løkke #kugle 1 r1 = random.uniform(0.5,2) #random uniform er en random float værdi. ball = sphere (pos=(15,46,18), radius=r1, color=color.black) x = random.uniform(-1.5,1.5) y = random.uniform(1,1.5) z = random.uniform(-1.5,1.5) ball.velocity = vector(x,y,z) #x, y og z er defineret ovenfor med random float værdier, #for at få røgen til at blæse en tilfældig retning #kugle 2 r2 = random.uniform(0.5,2) ball1 = sphere (pos=(15,46,18), radius=r2, color=color.black) x1 = random.uniform(-1.5,1.5) y1 = random.uniform(1,1.5) z1 = random.uniform(-1.5,1.5) ball1.velocity = vector(x1,y1,z1) #kugle 3 r3 = random.uniform(0.5,2) ball2 = sphere (pos=(15,46,15), radius=r3, color=color.black) x2 = random.uniform(-1.5,1.5) y2 = random.uniform(1,1.5) z2 = random.uniform(-1.5,1.5) ball2.velocity = vector(x2,y2,z2) #kugle 4 r4 = random.uniform(0.5,2) ball3 = sphere (pos=(15,46,15), radius=r2, color=color.black) x3 = random.uniform(-1.5,1.5) y3 = random.uniform(1,1.5) z3 = random.uniform(-1.5,1.5) ball3.velocity = vector(x3,y3,z3) while 1: #Denne while løkke får de fire kugler til at bevæge sig. rate (100) #kugle 1 ball.pos = ball.pos + ball.velocity*dt #kuglens position bliver flyttet i forhold til #den tilfældige velocity og da ganget med den #brugerindtaste værdi, for hastigheden de bevæger sig i #kugle 2 ball1.pos = ball1.pos + ball1.velocity*dt #kugle 3 ball2.pos = ball2.pos + ball2.velocity*dt #kugle 4 ball3.pos = ball3.pos + ball3.velocity*dt if scene.kb.keys: #Bliver der trykket på tastaturet? v_or_f = scene.kb.getkey() #Bind den trykte tastatur tast til variablen v_or_f if v_or_f == "v": #Hvis der bliver trykket v while 1: kugle.visible = True #kuglen er synlig textlabel.visible = True break elif v_or_f == "f": #Hvis der bliver trykket f while 1: kugle.visible = False #kuglen er usynlig textlabel.visible = False break if ball.y > 70: #Alle kugler stopper, når den ene af dems y koordinat > 30 break #Den uendelige løkke starter forfra 18

Flowchart Dette flowchart vil være opbygget som pseudo kode af den oprindelige program kode. (Se bilag 2 for forklaring af figurerne). Start input hastigheden dt nej Eksistere dt? ja Sæt scenen, tegn Avedøre værket, akserne, kuglen og udregn labelen Skriv label ja nej Er tallet der skal tages kvadratrod af over 0? (udregning) 19

Når 1=1 (uendelig løkke) Få random number til brug i radius i røg Få random number til brug i radius i røg Få random number til brug i radius i røg Få random number til brug i radius i røg Tegn røg (sphere) Tegn røg (sphere) Tegn røg (sphere) Tegn røg (sphere) Få random (x,y,z) koordinater til velocity vektoren Få random (x,y,z) koordinater til velocity vektoren Få random (x,y,z) koordinater til velocity vektoren Få random (x,y,z) koordinater til velocity vektoren Når 1=1 (uendelig løkke) Sæt røgen i bevægelse Sæt røgen i bevægelse Sæt røgen i bevægelse Sæt røgen i bevægelse 20

Hvis en tast trykkes v_or_f = den trykte tast Hvis v_or_f = v Hvis v_or_f = f Når en af røgskyernes y koordinat er over 70 Gør kugle og label usynlig Gør kugle og label synlig Stop Brugerfladen og funktionalitet Brugerfladen er beskrevet i videoen "forklarings_film.wmv" der befinder sig på vores studiewebs. Derfor vil vi ikke beskrive brugerfladen i tekstform, men blot henvise til filmen. Behandling af input data I programmet er der to former for input der skal behandles. Før programmet starter skal brugeren indtaste værdien for hvor hurtigt røgen ryger op af skorstenene. Variablen dt bruges til at starte programmet (hvis dt eksistere starter programmet), og bruges senere i den anden uendelige while løkke, hvor den multipliceres med velocity vektoren, som flytter røgskyerne (de fire sphere s). Dette sker som set nedenfor for al røgen: Hvor røgens position bliver adderet med velocity vektoren som er multipliceret med den inputtede dt variabel. Den næste data der inputtes er om kuglen, samt dens label, skal vises eller skjules. I koden undersøges for om der trykkes på keyboardet, derefter bindes tasten der trykkes på til variablen 21

v_or_f, som senere bruges til at identificere om tasten der blev trykket var enten v eller f. Hvis keyboard inputtet er et v, så vises både kugle og label, mens hvis inputtet er et f, så skjules både kugle og label. Begge statements er i hver deres uendelige while løkke, som break'es når den er udført dvs. når kugle og label enten er gjort synlig eller usynlig. Koden til dette ses til højre. Behandling af output data Programmet kommer med flere former for output. Det første output (trin 1) er når programmet startes og en info tekst kommer op der forklare kort om programmet, samt hvordan man navigere rundt. Det efterfølgende output data kommer i form af selve modelleringen af værket, modelleringen og røgen og derefter bevægelsen af røgen: Nedenfor ses selve modelleringen af værket, både visuelt og kodemæssigt. (trin 2) 22

Det er figuren "convex" som værket er hovedsagligt bygget op af, hvilket er en figur hvor man kan indsætte de punkter som der skal tegnes imellem. Dernæst bliver kuglerne skabt (trin 3): Kuglerne bliver skabt ved først at få en random tal (float værdi), dernæst skabe dem, hvor deres radius er det random tal. Velocity vektoren bestemmes ud fra et koordinatsæt skabt af 3 random tal. Det næste output kommer i form af at røgen bliver sat i bevægelse (trin 4): 23

Kuglernes position adderes med velocity vektoren som er multipliceret med en brugerangivet hastighed (dt). Når en af kuglerne får et y koordinat på over 70, stopper de alle og der bliver skabt 4 nye kugler. Trin 3 og 4 foregår indtil programmet bliver lukket af brugeren, mens de to andre kun foregår en gang per gang programmet køre. Kuglen og tekst labelen er modelleret i starten, men da de ikke er en del af en egentlig modellering så indgår de ikke i trinene. Koden og udseende af kuglen og labelen er dog som følgende: Matematisk udledning af formlerne der blev brugt til udregningen kan ses i bilag 3. Vi har dog i modelleringen indsat de ukendte variabler der bliver regnet med i bilaget. 24

Dokumentation af prototype fejl Løsning af (x,y,z) koordinatsæt En af de første problemer var at skrive koordinatsættene på en måde så vpython opfattede det på den måde vi ønskede. Det viste sig at den ikke opfattede et koordinatsæt, som værende af den traditionelle slags (x,y,z). I stedet opfatter den et koordinatsæt som (y,z,x). Dette var et nemt problem at løse, idet koordinaterne blot kunne byttes om uden andet skulle gøres. Løsning af "flyvende bolde" Da vi designede prototypen til hvordan røgen (kuglerne) skulle stige op af skorstenene, var et af hovedproblemerne at kuglerne aldrig stoppede men fortsatte ud i en uendelighed, og derfor ville der aldrig blive skabt nye kugler, da kuglernes bevægelse foregik i en uendelig løkke. På dette tidspunkt så koden således ud: Den uendelige løkke ville starte og de enkelte kugler ville blive sendt af sted på baggrund af deres position og den tilfældige velocity vektor defineret tidligere. De skulle så alle stoppe når den første kugle ramte y koordinatet 70 - dette var dog ikke tilfældet. Problemet blev løst ved at indse at kuglernes y koordinat sikkert aldrig ville blive præcis 70, derfor kunne dette løses ved at erstatte "=" tegnet med et ">", så der stod: På denne måde ville løkken break'es når en af y koordinaterne blev over 70, hvilket selvfølgelig skete hver gang. Løsning af keyboard input Keyboard inputtet skulle bruges til at lade brugeren bestemme om kuglen i planen skulle være synlig eller usynlig. Den første prototype så sådan ud: 25

Her skulle scene.kb.keys lagre et keyboard input, indtil den derefter bliver bundet til v_or_f via scene.kb.getkey() funktionen. Derefter skulle kuglen blive synlig eller usynlig alt efter om brugeren trykkede v eller f. Denne virkede dog ikke, da programmet i sin nuværende form kun så om et keyboard input blev trykket en enkel gang og så gjorde den det ikke mere. Dette kunne dog løses ved at indsætte den nuværende kode i en uendelig while løkke, da den så konstant ville undersøge om der blev trykket på keyboardet: Det næste problem opstod da denne kode skulle indsættes i samme while løkke som fik kuglerne til at bevæge sig, da "break" kommandoen ville breake hele while løkken og kuglerne derved ville stoppe før en af kuglerne havde fået et y koordinat større end 70. Løsningen til dette problem var stort set den samme som til at starte med - nemlig at lave en uendelig løkke: 26

De uendelige løkker ville sørge for at den oprindelige uendelige løkke først ville brydes når en af kuglernes y koordinat blev over 70, da "break" linjen ved keyboard input'sne kun ville bryde deres egen løkke. Udviklings miljø Programmet er udviklet i programmeringssproget python, i idle python, hvor ekstramodulet visual python (vpython) benyttes til at tegne selve 2D figurerne. Python idle er et integreret udviklingsmiljø beregnet til python, der er beregnet til både at skrive kode i, compile, samt at køre koden og komme op med fejl meddelelser. Visual python er et eksternt modul til python, det har funktioner der gør det muligt at tegne 3D objekter. Med visual python medfølger et lidt andet udviklingsmiljø kaldet vidle python, dette har samme funktioner som idle, dog kan koden compiles uden at lave en permanent kopi af programmet på ens harddisk. Funktionsbiblioteker I dette program er følgende biblioteker brugt Visual Visual biblioteket gør det muligt at tegne al grafikken. Dette biblioteket bruges generelt i hele programmet. Random Random biblioteket bruges til at få tilfældige tal til kuglernes radius og til deres velocity vektor. I vores tilfælde har vi brugt den del af random biblioteket som outputter en tilfældig float værdi. Måden forpå dette foregår er: variabel = random.uniform(z,q) Hvor z og q er det interval hvori det tilfældige tal skal ligge. Time Time biblioteket bruges til en sleep-statement, som bruges i starten for at give brugeren tid til at læse at programmet vil starte, efter hastigheden på røgen er blevet indtastet. Koden til dette ser således ud: Math Math biblioteket bruges til at udregne arealet hvor kuglen snitter planen. I vores tilfælde er det for at kunne bruge sqrt() statementen (kvadratrod). Konklusion Vi fik fremstillet et program der kunne modellere Avedøre værket i forhold til de matematisk beregnet punkter fra matematikdelen af projektet. Vi fik indsat en kugle i planet og udregnet dens snitflade i python, som blev vist til brugeren i form af en tekst label. Både kuglen og labelen kunne gøres usynlig ved at trække på F og synlig ved at trykke på V. Hastigheden hvorpå røgen steg op af skorstenene bliver bestemt af brugeren før modelleringen starter, alle hastigheder er tilgængelige i et foreslået interval. 27

Bilag Bilag 1 Udregning af resterende punkter. For at visualisere kraftværket var det udover de allerede fundne punkter nødvendigt at finde 4 punkter mere. Beregninger her vil ikke have en analysedel, eller andet, bare være selve beregningen, så man kan se hvordan punktet er udregnet. M: M ligger på linjen origo til P, derved er P retningsvektoren. Bruger punktet origo, derved er parameterfremstillingen: 20 = 20 80 Kender punktet da det er lig med. 42= 80 t=0,525 Indsætter i parameterfremstilling. =0,525 20 10,5 20=10,5 80 42 28

P: Er beregnet udfra at afstanden fra F til E, er den somme som fra A til P på y aksen, P og B har samme x og z koordinat. F til E=12 Derved er P: 40 P=12 0 N: NG er parallel med med AB, derved har N samme x og z koordinat som G, afstanden mellem N og G, er den samme som fra P til F, denne afstand er 40-12*2=16. Derved er N: 33,75 =28 16=12 25 O. OP er parallel med AB, derved har O samme x og z koordinat som P. Afstanden mellem O og P er den samme som fra P til F, altså 16. 40 =28 16=12 22 Bilag 2 - forklaring a flowchart figurer Følgende forklare brugen og meningen med de forskellige brugte figurer i flowchartet. While, if, else.. Input og output Start og slut statements Bilag 3 Beregn en ligning for snitfladen mellem en kugle og flade: 29

Kugle: ( ) +( ) +( ) = Planen som skærer: +++=0 Vi kan danne parameter fremstilling, kaldet m, ud fra kuglens centrum, og planens retningsvektor: = + Indsætter udtrykkende i planligningen: ( + )+ ( + )+ ( + )+=0 Isolerer t: = + + + + + Kan nu beregne parameter fremstillingen: = + + + + + + Snitfladens radius kan nu findes: = (( ) +( ) +( ) ) Og nu kan arealet findes: = Alt dette er implementeret i koden, i følgende trin: Først bliver t beregnet. Derefter bliver x_m, y_m og z_m beregnet. Derefter bliver radius af snitfladen beregnet. Derefter bliver arealet beregnet. 30