ItCG Projekt 2. Bjarke N. Laustsen ( ) Martin Jørgensen ( )
|
|
|
- Stig Brandt
- 9 år siden
- Visninger:
Transkript
1 ItCG Projekt 2 Bjarke N. Laustsen ( ) Martin Jørgensen ( ) 1/06/2007
2 Indhold: INTRODUKTION... 2 HVAD ER ET PARTIKEL SYSTEM?... 2 LØSNING AF ORDINÆRE DIFFERENTIAL LIGNINGER:... 3 SCENE 1: FOUNTAIN SCENE... 4 PARTIKEL SYSTEMET:... 5 Preframe:... 5 Initialisering af nye vandpartikler:... 6 Preframe Udregninger:... 6 Kræfter:... 7 Tegning af partiklerne:... 8 Billboarding:... 8 Tegning af gennemsigtige objekter:... 9 VANDOVERFLADEN:...10 SCENE 2: SPRING-MASS CLOTH SCENE...11 PARTIKEL SYSTEMET:...12 Kræfter:...13 Tegning af partiklerne:...15 SKYBOX:...16 LENSFLARE:...17 SCENE 3: SPRING-MASS JELLY SCENE...20 KONKLUSION...21 FUTURE WORK...22 REFERENCER
3 Introduktion I dette projekt har vi implementeret to partikel systemer. Partikel systemer kan bruges til at rendere objekter og effekter, der kan være svære at simulere med de traditionelle metoder fra første del af kurset. Projektet består af 3 scener: En springvands scene, en scene med et stykke stof der blafrer i vinden og en scene med en skvulpende kasse. I programmet vælges scene med F1-F5. På windows (med f.eks. MingW installeret) kompileres programmet med make (eller tilsvarende) og køres med main.exe. På linux kompileres det med make -f MakefileLinux og køres med main. Hvad er et Partikel System? Iflg. [RTR] sektion 8.5 er et partikel system en mængde små objekter der sættes i bevægelse af en eller anden algoritme. Som regel er reglerne for hvordan partiklerne sættes i bevægelse en efterligning af de fysiske love for masse-kraft påvirkning. Partiklerne i et partikel system følger altså ofte de fysiske love for hvordan kræfter påvirker bevægelsen af masse. Dette gælder også i vores partikel systemer. Man skal altså have et antal kræfter og hver partikel skal gives en masse (samt position, hastighed og evt. andre attributter). En kraft påvirker en partikel ved at accelerere den i en given retning og med en given styrke. En kraft repræsenteres som en 3D vektor. Accelerationen af en f partikel påvirkes af en kraft på denne måde: a m (vi ser altså at jo større masse partiklen har, jo stærkere skal kraften være for at opnå en given acceleration). Hvis flere kræfter f 1,...,f n påvirker en partikel, fås den totale acceleration ved at summere kraft-vektorerne: n a. i 1 f i m Der er flere måder at udregne hastigheden og positionen af en partikel ud fra accelerationen. Den simpleste måde er eulers metode. Efter accelerationen er fundet, opdateres hastighedsvektoren, ved at plusse den med accelerationen. For at gøre animationen tidsafhængig, skal accelerationen dog først ganges med tidsforskellen fra sidste frame til denne frame (målt i sek.): position findes nu ud fra hastighedsvektoren. Alt i alt: a : f m v : v a t p : p v t v : v a t. Den nye Til sidst skal det nævnes at partikel systemer ikke handler om hvordan systemet bliver tegnet de kan tegnes på mange måder og behøver ikke tegnes som partikler. For eksempel tegnes vores partikler i springvands systemet som 2
4 partikler (texturede billboardede quads), mens partiklerne i vores spring-mass system i stedet bruges som vertices i trekanter og selve partiklerne tegnes ikke eksplicit (man kan dog få partiklerne tegnet eksplicit ved at trykke p ). Implementation af partikel effekter består altså af to separate trin: simulerings trinet og renderings trinet. Løsning af ordinære differential ligninger: Metoderne vi bruger til at opdatere hastigheden og positionen ud fra accelerationen fra frame til frame er faktisk løsnings metoder til differential ligninger. Da dette ikke er et kursus i numerisk analyse vil vi ikke gå i detaljer med dette. Eulers metode blev skitseret i forrige afsnit. Fordelen ved den er at den er simpel, men ulemperne er at den er ustabil og trunkerings fejlen er stor. Ustabilitet i numerisk forstand, betyder at små fejl lavet på ét trin i processen bliver forstørrede i de efterfølgende trin. Dette kommer i vores tilfælde til udtryk i at vores partikel systemer eksploderer. Det sker ofte hvis vi tager for store skridt i tiden t (hvis frame-raten bliver for lav). Dette er rigtigt godt og intuitivt forklaret i [4]. En bedre metode er Verlets metode. Verlets metode står beskrevet i [PMN] og er mere stabil end eulers metode. Den kan dog stadig eksplodere, men ikke helt så nemt som eulers metode. En forbedring er Verlets time-corrected method, som er beskrevet i [5]. Dette er metoden vi har brugt i vores spring-mass system. Der findes også andre mere stabile metoder der dog er en smule dyrere, som f.eks. Runge-Kutta dem har vi dog ikke set på. 3
5 Scene 1: Fountain Scene Den første scene indeholder vores første partikel system, nemlig et springvand i et rum. Springvandet udspringer fra midten af en kasse midt i rummet. Vandet skydes op i luften og trækkes nedad af tyngdekraften. Hvis vandpartiklerne falder ned på kassen, hopper de hen ad kassen en billig måde at efterligne at vandet pjasker når det rammer kassen og flyder hen ad den. Omkring kassen er et vandbassin. Når vandpartiklerne fra springvandet rammer denne vandoverflade, kommer der små forstyrrelser i vandet. Selve scenen er opbygget af kasser med textures. Vandoverfladen er lavet ud fra [PMN] og springvandet er vores partikelsystem. Med grabberen kan man tage fat i kameraet og verdenen. Begge disse bruges til at translatere og rotere verdenen med musen. Forskellen er at rotation af kameraet sker omkring kameraets position (det globale nulpunkt), mens rotation af verdenen sker omkring midten af scenen (verdenens lokale nulpunkt). Kameraet kan også translateres med cursor tasterne. Udover dette er der taster der kan bruges til at ændre visse parametre ved springvandet for eksempel spredningen af vandstrålen og at tænde og slukke for springvandet. Tryk h for at se hvilke taster der gør hvad. 4
6 Hovedklasserne i denne scene er: - FountainScene : selve scenen - Fountain : kontrol klassen for springvands partikel systemet - WaterParticle : partiklerne i systemet er objekter af denne klasse - WaterPlane : vandoverfladen Scenegrafen for scenen ser sådan ud: camera : Camera world : GroupObject light1 : Light centercube : Cube floor : Cube water : WaterPlane fountain : Fountain p 1 : WaterParticle p n : WaterParticle Bemærk at et GroupObject tegner dets børn i rækkefølgen venstre mod højre. Dette udnytter vi når vi tegner gennemsigtige objekter (fountain og water) i scenen så de gennemsigtige objekter bliver tegnet til sidst se nedenfor. Partikel Systemet: Lad os nu se på selve partikel systemet der styrer vandpartiklerne. Vi vil først se på hvordan en ny partikel initialiseres når den laves, hvordan simulations udregningerne foregår fra frame til frame i Fountain klassens preframe metode og til sidst hvordan partiklerne tegnes af klassens draw metode. De variabler der gemmes for hver partikel (i WaterParticle objekterne) som vedrører udregningerne for bevægelse af partiklen er: masse, position, hastighedsvektor, om den har bounced på kassen endnu og tidspunktet den blev lavet. I denne scene har alle partiklerne samme masse. Udover disse variable i WaterParticle klassen gemmes også nogle konstanter i Fountain-klassen som bruges som parametre for bevægelsen og som er fælles for alle partiklerne. Preframe: For at udregne bevægelsen af partiklerne fra sidste frame til denne frame, kaldes preframe metoden i Fountain-klassen. Denne metode står for at lave 5
7 udregningerne der flytter partiklerne, ved at kalde preframe metoderne i WaterParticle-objekterne, og for at lave nye partikler og dræbe gamle partikler. Initialisering af nye vandpartikler: Lad os først se på hvordan den laver en ny partikel. En ny vandpartikel laves ved at konstruere et nyt WaterParticle objekt. Når en ny vandpartikel laves, udsendes (eller emittes ) den fra kassen i midten af rummet. Partiklernes startposition initialiseres således: x og z koordinatet sættes til et tilfældigt sted indenfor en cirkel midt på kassen. Startpositionens y-koordinat sættes til at være en smule under toppen af kassen. p start = ((random()-0.5)*k startposspread, (random()-0.5)*k startposymul - 0.5, (random()-0.5)*k startposspread ) Partiklesnes start hastighedsvektor sættes således: v start = ((random()-0.5)*k startvelspread, random() *k startvelymul + k startvelyadd, (random()-0.5)*k startvelspread ) Ved at variere k startvelspread kan man altså variere hvor meget partiklerne spredes i forskellige retninger dvs. tykkelsen af vandstrålen. Partiklernes hastighed opad er også forskellig fra partikel til partikel, sådan at de når forskellige højder, også selvom de har næsten samme xz-hastighed. Preframe Udregninger: I hver frame skal partiklernes positioner og hastigheder opdateres. Der skal også laves nye partikler og gamle partikler skal muligvis dræbes. Fountain objektets preframe metode kalder preframe metoderne i alle vandpartiklerne (WaterParticle objekter). WaterParticles preframe metode sørger for at accelerere partiklernes hastigheder ud fra de kræfter der påvirker den, sørger for at partiklerne bouncer hvis de rammer toppen af den midterste kassen og sørger for at give WaterPlane objektet besked hvis partiklen rammer vandfladen. Et partikel objekt holder også selv styr på hvornår det skal slettes dens preframe metoden returnere en boolean der fortæller Fountains preframe metode om den skal slettes. En partikels preframe metode finder dens nye position og hastighedsvektor via eulers metode, som beskrevet ovenfor. 6
8 En partikel bouncer på den midterste kasse hvis dens y-koordinat er mindre/lig y- koordinatet af toppen af kassen og dens x og z koordinater er indenfor kassen. Første gang en partikel rammer kassen reduceres dens y-hastighed betydeligt og fortegnet ændres så den får retning opad. Samtidig bliver dens hastighed i xzretningen forøget med en faktor. De evt. efterfølgende gange den rammer kassen, ændres blot fortegnet af y-hastigheden. Hvis partiklens y-koordinat er mindre/lig y-koordinatet på vandoverfladen, kaldes hit-metoden i WaterPlane objektet (vil blive beskrevet nedenfor) med partiklens (x,z) koordinat, sådan at der kommer en forstyrrelse i vandoverfladen det sted partiklen ramte. En partikel bliver dræbt hvis dens y-koordinat er under en vis værdi y kill eller hvis den har oversteget sin levetid. Grunden til vi har sat en begrænsning på levetiden er at undgå der kommer for mange partikler i scenen på én gang. Ved tynde stråler har partiklerne lav xz-hastighed, hvilket gør at det tager lang tid før de bouncer ned af kassen og når y kill. Uden begrænset levetid ville der derfor kunne være for mange partikler i live og dette ville tage for meget CPU tid. Når en partikel har oversteget sin levetid og skal slettes, ville det se forkert ud hvis partiklen forsvandt fra det ene øjeblik til det andet. Før den slettes, fades den langsomt ud ved at formindske dens -værdi. Først når =0 slettes den. Det er WaterParticle objektet selv der sørger for at fade farven ud og det er som sagt også objektet selv der sørger for at holde styr på hvornår det skal slettes. Kræfter: Vi vil her kort beskrive kræfterne der påvirker partiklerne i springvandet: - Tyngdekraften accelerere partiklerne nedad: f gravity = [0, -m g, 0]. (m er atomets masse og for normal dansk tyngdekraft er g=9.82 sm ) Det ses at tyngdeaccelerationen er uafhængig af partiklens masse. - Selvom der ikke er vind af nogen betydning i et rum, har vi alligevel tilføjet en meget simpel vindkraft i scenen som kan styres med tastaturet. Grunden til dette er at det er nemmere at styre springvandets retning interaktivt ved at variere vinden, end det er at styre den ved at variere retningen partiklerns initielle hastighedsvektor, da man med vinden kan se resultatet på alle partikler med det samme. Denne simple vindkraft virker sådan: f wind = w, hvor w er en vektor med vindens retning og styrke - (det at partiklerne bouncer på kassen kan også ses som resultatet af en kraft, men det er ikke implementeret eksplicit som en sådan) 7
9 Tegning af partiklerne: Hver partikel tegnes som en billboarded textured quad. Der er to muligheder for hvilken texture der bruges, for at give springvandet en smule variation. Quaden er centreret omkring partiklens position og bliver længere jo større partiklens y- hastighed er. Vi bruger billboarding på quadene sådan at de altid vender ud mod skærmen. (Havde vi ikke brugt billboarding ville en quad f.eks. være helt flad når man så den fra siden) Udover dette er partiklerne gennemsigtige, hvilket der også skal tages speciel højde for når de tegnes (dette vil blive beskrevet nedenfor). Når en ny partikel laves, initialiseres dens farve og -værdi således (R,G,B, ) = (random()* , 1, 1, random()* ) i WaterParticle constructoren. (Det er også muligt at tegne springvandet som linier i stedet for quads, hvilket kan være nyttigt til debugging. Dette valg sker på compile time.) Billboarding: Partiklerne tegnes som world-oriented billboards med viewplane-alignment og er lavet ud fra beskrivelsen i [RTR] sektion 8.3. Da vores kamera kan rotere om z- aksen (roll) ville det se forkert ud hvis vi brugte screen-alignede billboards. Formålet med billboarding er at vende partiklernes quads mod kameraet (skærmen). Kameraet er altid det globale koordinatsystem i OpenGL. For at vende ud mod skærmen, skal de altså være parallelle med det globale xy-plan. For world oriented billboards skal vi, som beskrevet i [RTR] sektion 8.3.2, bruge kameraets negerede normal-vektor og verdenens up-vektor i globale koordinater. Disse skal bruges til at konstruere en ortonormal basis (ONB) for rotations matricen som billbordet skal orienteres med. Kameraets normal-vektor c n er altid (0,0,-1) og verdens up-vektor w up er y-aksen i globale koordinater efter kameraets transformationer og verdenens egne transformationer er udført. Disse to vektore er ikke nødvendigvis ortogonale, som de jo skal være for at være en ONB. Vi vælger at c n skal være fast mens w up skal justeres sådan at de bliver ortogonale. Valget at c n er fast gør at vores billboards vil være parallelle med xy-planen. Den ortonormale basis konstrueres således: Vi laver først right vektoren r = -c n w up. Den justerede up-vektor w up er: w up = -c n r. Den ortonormale basis bliver nu: ONB = (r, w up, -c n ). 8
10 Lad os se på billboaring koden. Billboarding koden er i partiklernes draw-metode. Først translatere vi hen til positionen hvor quaden skal tegnes, mens vi stadig er i springvandets lokale koordinatsystem: gltranslatef(pos->x, pos->y, pos->z); Derefter finder vi ONB en på overstående måde og overskriver rotations-delen af modelview matricen med denne, men beholder translations delen: r glloadm atrix( 0 w up 0 ' c 0 n oldtranslationvector ); 1 Partiklen tegnes nu som en quad i xy-planen omkring (0,0,0). (det lokale (0,0,0) jo er den position hvor partiklen skal tegnes pga. translationen fra før). Tegning af gennemsigtige objekter: Gennemsigtige objekter (objekter hvis alfa-værdi er mindre end 1) skal renderes med speciel omhu, som beskrevet i [RTR, s.102n] og [1]. Generelt skal gennemsigtige primitiver først renderes efter alle ikke-gennemsigtige primitiver er blevet renderet og de skal tegnes i back-to-front rækkefølge, sådan at de gennemsigtige primitiver længst væk fra kameraet renderes først. Grunden til dette er z-bufferen. Z-bufferen bruges jo til at afvise at putte farven af et fragment ind i colorbufferen, hvis dens z-koordinat er mindre end z-koordinatet af det fragment hvis farve allerede er i colorbufferen. Når vi tegner gennemsigtige objekter er dette ikke helt den opførsel vi ønsker. Hvis vi f.eks. først tegner et ikke-gennemsigtigt primitiv A og derefter et gennemsigtigt primitiv B foran det, vil vi kunne se A bag B. Hvis vi derimod tegnede B først, ville vi ikke kunne se A, da dens fragmenter ville blive afvist af z- buffer testen. Resultatet afhænger altså af rækkefølgen A og B bliver tegnet. Vi skal derfor tegne alle ikke-gennemsigtige primitiver før vi begynder at tegne de gennemsigtige primitiver. Af samme grund skal de gennemsigtige primitiver længst fra kameraet tegnes før dem der er tættere på. Vi sørger derfor for at alle ikke-gennemsigtige objekter tegnes før de gennemsigtige objekter i scenerne. Før vandpartiklernes quads tegnes sorterer vi dem back-to-front og tegner dem i denne rækkefølge. Bemærk at de selvfølgelig skal sorteres efter global z position, ikke lokal z position. Comparatoren der bruges i sorteringen, finder en partikels globale z-koordinat ud fra dens lokale z- koordinat ved at gange dens lokale z-koordinat med modelview matricen. 9
11 (Det kan selvfølgelig lede til en mere kompliceret problem stilling end skitseret her, hvis primitiverne vi tegnede ikke var orienterede parallelt med skærmen og det ikke var helt veldefineret om en quad var foran eller bagved en anden. Her skulle man måske splitte nogle quads op i flere mindre quads. Heldigvis bruger vi billboards, så vi kan uden problemer benytte denne metode). Vandoverfladen: Vandoverfladen er implementeret i WaterPlane klassen og er lavet ud fra beskrivelsen af bølgeligningen i [PMN]. Bølgerne i modellen taber dog aldrig energi, så for at opnå dæmpning har vi ændret formlen til: z(x, y, t t) i j 2 z(x i 1 (2 4, y, t) z(x 2 j, y, t) z(x, y )z(x, y, t) ((1 k t) z(x, y, t t) k t z(x, y, t)) hvor k [0;1] angiver hvor meget bølgerne skal dæmpes. i i i 1 j, t) z(x, y Når en vandpartikel fra springvandet rammer vandoverfladen skal den skabe en forstyrrelse i vandet. Dette sker ved at hit-metoden i WaterPlane objektet bliver kaldt. Metoden bliver kaldt med x og z koordinatet af vandpartiklen og metoden sørger så for at identificere partiklen i vandoverfladen der svarer til dette koordinat. Forstyrrelsen skabes ved at denne partikels y-koordinat bliver formindsket en lille smule. Vandoverfladen kan tegnes på to måder. De enkelte partikler kan tegnes som kugler og overfladen kan tegnes som gennemsigtige trekanter med partiklerne som vertices. Da overfladen er gennemsigtig skal den igen først tegnes efter de ikke-gennemsigtige objekter er blevet tegnet. Den skal dog tegnes før vanddråberne, da man skal kunne se den igennem vanddråberne. Da det i vandoverfladen er meget svært at få øje på fejl pga. manglende sortering, har vi undladt at sorteret trekanterne i back-to-front rækkefølge for at spare CPU tid. i j 1 i i i j 1, t) i i 10
12 Scene 2: Spring-mass Cloth Scene Den anden scene indeholder vores andet partikel system og forestiller et stykke stof der hænger højt oppe over nogle bjerge en tidlig aften. Scenen indeholder partikel systemet for stoffet, en skybox og en lensflare effekt. Med grabberen kan man igen tage fat i kameraet og verdenen. Man kan nu også tage fat i de enkelte partikler i stoffet og man kan styre vindens retning med grabberen. Igen har visse taster speciel betydning f.eks. kan man vælge at tegne de enkelte partikler med p tasten og vælge ikke at tegne selve overfladen af stoffet med t. Tryk igen h for help. Hovedklasserne i denne scene er: - SpringmassScene :selve scenen - SpringSystem : kontrol klassen for partikel systemet - Spring : repræsenterer en fjeder i systemet - Atom : repræsenterer et atom (en partikel) i systemet - Skybox : skyboxen - Lensflare : lensflare effekten 11
13 Scenegrafen for scenen ser sådan ud: camera : Camera world : GroupObject springsystem : SpringSystem skybox : Skybox sun : Cube a 1 : Atom s 1 : Spring winddirection : ArrowObject lensflare : LensFlare a n : Atom s m : Spring Bemærk igen at det gennemsigtige objekt (lensflare) tegnes sidst. Partikel Systemet: Lad os nu se på partikel systemet. Partikel systemet er lavet ud fra beskrivelsen i [PMN]. Systemet er et såkaldt spring-mass system der består af atomer (partikler) og fjedre imellem disse atomer. Hvert atom er forbundet til et antal andre atomer via fjedre. I vores implementation er atomerne placeret i et n n gitter. Hvert atom er bundet til dens horisontale, vertikale og diagonale naboer: Figur: initiel konfiguration hvor n=5. I starten af scenen sættes positionerne af atomerne op og fjedrene forbindes imellem dem. Denne initielle tilstand er hviletilstanden (equlibrium tilstanden). Her er der ingen energi i systemet atomerne har ingen kinetisk energi (de bevæger sig ikke) og der er ingen potentiel energi i fjedrene (de er i hviletilstanden). 12
14 Ved at ændre positionerne eller hastighederne af atomerne (dvs. ved at tilføre energi) vil systemet komme ud af hviletilstanden og fjedrene vil prøve at komme tilbage til deres hviletilstand ved at flytte atomerne de er forbundet til. Hvis en fjeder er presset sammen eller strukket ud, vil den prøve at komme tilbage til dens hviletilstands længde igen, ved at flytte de to atomer den er forbundet til. Dette gør fjedrene ved at udsætte de to atomerne for fjeder kraften der modvirker bevægelsen ved at accelerere atomerne i en bestemt retning og med en bestemt hastighed (denne kraft vil blive beskrevet i flere detaljer nedenfor). Lad os se på de tre klasser partikel systemet består af: Atom klassen repræsenterer et atom i systemet. Klassen indeholder instans variabler for massen, positionen og hastighedsvektoren. Den indeholder listen af fjedrene som atomet er forbundet til. Den indeholder også den totale kraft der påvirker den (denne værdi sættes hver frame af SpringSystem klassen). Til sidst indeholder den også partiklens position fra sidste frame, da dette skal bruges i verlets metode, samt t fra sidste frame, da dette bruges i time-corrected verlet. Spring klassen repræsenterer en fjeder i systemet. Den indeholder pointere til de to atomer den er forbundet til, fjeder-konstanten og dens hviletilstands længde. SpringSystem klassen er kontrol klassen for systemet. Dens constructor sætter atomerne og fjedrene op i gitteret. Som Fountain klassen har denne klasse også en preframe og en draw metode. Preframe metoden udregner kræfterne for hvert atom (incl. fjeder-kræfterne) og kalder derefter preframe metoderne i alle atomerne. Preframe metoderne af de to atomer som stoffet hænger i bliver dog ikke kaldt på denne måde undgår vi at disse atomer bevæger sig. Preframe metoden kaldes heller ikke på et atom, hvis grabberen er ved at flytte det (det ville besværliggøre flytningen en hel del). Atomernes preframe metoder opdatere atomernes position og hastigheds vektore via eulers eller verlets time-corrected metode (hvilken metode der bruges bestemmes på compile time). Fjeder klassen har ingen preframe metode. Kræfter: Lad os nu se på kræfterne der er i vores implementation: - Fjeder Kraften: Denne kraft er kort beskrevet i [PMN]. En fjeder er som nævnt forbundet til 2 atomer. Når atomernes positioner ændres bliver fjederen strukket eller presset sammen (i forhold til dens start-længde (hvilelængden)). Som sagt 13
15 vil en fjeder gerne have hvilelængden og prøver at komme tilbage til den ved at modvirke strækket eller presset via en kraft i den omvendte retning. Begge atomer fjederen er forbundet til påvirkes med samme kraft dog med modsat fortegn. Kraft påvirkningen på et atom a fra en fjeder der forbinder a til et atom b er: f spring_ ab w d d ab ab (D d hvor: - d ab er den nuværende retningsvektor af fjederen med fjederens længde (målt fra a til b for b til a er det omvendt fortegn) - D er hvilelængden af fjederen - w er en fjeder konstant der angiver hvor stiv fjederen er Sidste led af formlen er længden af strækket (målt med fortegn). Vi ser at kraften enten er i d ab retningen eller modsat (hvis D< d ab ). Kraften er altså med andre ord parallel med fjederens retning. Vi ser også at jo større w, jo større er kraften (fjederen er altså mere stiv - kommer hurtigere tilbage til hviletilstanden). Den totale fjeder-kraft på et atom er selvfølgelig summen af kræfterne fra de fjedre som den er forbundet til. (og denne kraft skal selvfølgelig findes inden man ændrer atomernes positioner) - Dampening Kraften: En dampening kraft er en kraft der dæmper bevægelsen af en partikel og dermed styrken af alle kræfter der påvirker partiklen. Den kan ses som friktion af det medium som partiklen bevæger sig i. Kraften virker i modsat retning partiklens hastighed: f dampening = -k dampening_konstant v hvor v er hastighedsvektoren fra den forgående frame for atomet som kraften virker på. (bemærk at da v er fra forgående frame vil kraften altså ikke udslukke alt bevægelse selvom k dampening_konstant =1 da kræfterne fra denne frame stadig vil accelerere partiklen) Denne kraft er nødvendig i vores system fordi det er nødvendigt at dæmpe fjeder kraften. Hvis den ikke blev dæmpet ville stoffet f.eks. hoppe op og ned uden at miste energi, når det blev udsat for tyngdekraften (svarende til at styrken af tyngdekraften og fjederkraften skiftes til at vinde over hinanden), hvilket ikke ser synderligt realistisk ud. Udover at gøre bevægelsen mere realistisk, lader det også til at kraften modvirker ustabiliteten af de numeriske integrations metoder der skal mere til før de eksploderer. ab ) 14
16 - Tyngde Kraften: Denne kraft er f gravity = [0, -m g, 0] som beskrevet tidligere. - Vind kraften: Denne kraft er lavet efter beskrivelsen i [2]. Kraften er lidt anderledes end de tidligere kræfter, da den ikke kun afhænger af de individuelle partikler og fjedre, men mere af hvordan partiklerne bliver sat sammen når de skal tegnes. I vores implementation tegnes klædet som trekanter med atomer som vertices vi skal derfor se hvordan vinden påvirker en trekant. Vi har en vind-vektor w der beskriver retningen og styrken af vinden. Kraft påvirkningen af vinden på en trekant afhænger af styrken af vinden, arealet af trekanten og orienteringen af trekanten i forhold til vindens retning dvs. vinklen mellem trekantens normal-vektor n og vind-vektoren w. Når kraftpåvirkningen på trekanten er fundet tilføjer vi denne kraft til de tre atomer som var vertices i trekanten. Efter alle trekanter er løbet igennem, har hvert atom fået summen af vindkraften fra alle trekanterne som de er vertices i. n f (n w) ( er prikprodukt) wind n Vinden påvirker en trekant i dens normal-vektors retning, som det fremgår af den første faktor. Den anden faktor angiver styrken, som jo afhænger af trekantens areal og orientering i forhold til vinden. Da n er fundet via krydsprodukt mellem to af trekantens sider s 1,s 2 er arealet proportional s1 s2 n med længden af n: A 2 2. Prikproduktet giver os kraftens styrke ud fra arealet A, vindens styrke w og orienteringen n,w : n w n w cos - Grabber: Med grabberen kan man flytte de individuelle atomer med musen. Dette gøres blot ved at ændre atomernes positioner. Dette er altså ikke eksplicit implementeret som en kraft, men svarer jo til at partiklen bliver accelereret i bestemte retninger. Når man flytter et atom vil andre atomer også følge med, pga. fjeder kraften, da de jo er forbundet til hinanden via fjedre. Tegning af partiklerne: Vi har lavet to måder at tegne systemet og systemet kan godt tegnes på begge måder på samme tid. ( p og t tasterne bruges til at slå måderne til og fra) Den første måde er at tegne atomerne som kugler og fjedrene som linier. Jo mere kinetisk energi et atom har og jo mere potentiel energi en fjeder har, jo n, w 15
17 rødere er de. Dvs. jo hurtigere et atom bevæger sig og jo længere en fjeder er fra dens hvilelængde, jo rødere bliver de. Den anden måde er at tegne overfladen af klædet via trekanter med textures. Vi deler hver celle i atom gitteret op i to trekanter, hvor atomerne bruges som vertices: Hver vertex tildeles et texture koordinat og en vertex normal. Vertex normalen findes ud fra dens nabo atomers position via krydsprodukt. Texture koordinaten tildeles sådan at verticen svarende til atom (i,j) i gitteret får texture koordinatet (i/n, j/n). Skybox: Vi har brugt en skybox til at lave omgivelserne i scenen. Skyboxe står beskrevet i [RTR] sektion 8.9. En skybox skaber illusionen af detaljerede omgivelser langt borte i alle retninger. Med de rigtige textures kan det se utroligt overbevisende ud. På trods af dette er de overraskende nemme at lave. Man laver blot en kasse med 6 sider med en texture på hver af disse sider. Man placerer kassen sådan at kameraet er præcis i midten af kassen (kameraet skal til hver en tid være i midten af kassen, så kassen skal ikke flytte sig med resten af verdenen ved translationer). For at man ikke kan se det er en kasse, skal man slå lighting fra, da dette ville gøre det klart at man så på siderne af en kasse. Figur: Vores skybox med lighting slået til. Det ses tydeligt at vi befinder os i en kasse. 16
18 Kameraet altid er placeret i det globale koordinatsystems nulpunkt. Måden vi har sørget for at skyboxen altid er placeret sådan at kameraet er præcis i midten af boxen, er at tegne den centrere omkring nulpunktet og nulstille transitionerne fra modelview matricen før den tegnes på denne måde beholdes rotationerne mens translationerne smides væk. Som nævnt i [RTR] kan der være problemer med at få det til at se helt rigtigt ud de steder hvor texturene fra de forskellige sider af kassen støder op mod hinanden. Vi oplevede kun ét mindre problem af denne art. Til at starte med havde vi brugt texture wrapping funktionen GL_REPEAT (se [RED s.427]). Da vi bruger texture interpolation (GL_LINEAR frem for GL_NEAREST), betød dette at vi fik synlige linier i kanterne af hver texture, da GL_REPEAT funktionen interpolere farven i den ene side af en texture med farven fra den modsatte side. Disse linier gjorde at man godt kunne se det var en kasse. For at undgå dette brugte vi GL_CLAMP_TO_EDGE i stedet (ikke GL_CLAMP da denne interpolere til texturens border-farve i siderne, hvilket kun gør linierne tydeligere). Lensflare: Som beskrevet i [RTR] sektion 8.4 er en lensflare en special effekt der efterligner måden hvorpå det indkommende lys reflekteres i kameralinsen på virkelige kameraer. Denne effekt er forholdsvis nem at efterligne og kan give en forøget fornemmelse af lys intensitet fra lysende objekter. Vores implementation er baseret på beskrivelsen i [3], dog har vi tilføjet nogle udvidelser. En lensflare effekt er i bund og grund en 2D effekt. Det første vi gør er at lave en vektor fra midten af skærmen til lyskildens position på skærmen. Midten af skærmen i globale 2D-koordinater er (0,0) og lyskildens 2D-position på skærmen finder vi ved først at finde dens position i globale 3D-koordinater (ved at se på translations indgangene i modelview matricen) og derefter at projektere positionen på det globale xy-plan: (x p,y p ) = (x/z,y/z). Da midten af skærmen er (0,0) er v=(x p,y p ) vektoren fra midten af skærmen til lyskildens position på skærmen. 17
19 Langs linien der går igennem denne vektor skal vi nu tegne vores haloer og bursts. Vi starter med at normalisere w = v/ v og huske på dens længde v. For at tegne billederne langs linien, skal vi altså blot tegne billederne på linien d*w for et antal passende værdier af d (bemærk at hvis vi sætter d= v tegner vi oven i solen og at negative værdier af d svarer til den modsatte side af (0,0)). Vi tegner haloerne og burstene som screen-alignede texturede quads. Vi tegner disse quads i det globale koordinatsystem (via glloadidentity()) med z=-1 for alle vertices. Dette svarer til screen-aligned billboarding. Kameraets negerede normal vektor og kameraets up-vektor er altid hhv. (0,0,1) og (0,1,0). Rotations matricen quadene skal orienteres efter er dermed altid identitets matricen. Da vores textures er delvist gennemsigtige, skal vores quads først tegnes efter alle ikke-gennemsigtige objekter er blevet tegnet. Da vores lensflare skal være foran alt andet i scenen, slås depth testen fra og de tegnes først efter alt andet (også efter andre gennemsigtige objekter) er blevet tegnet. Lighting slås også fra, da vi ikke er interesserede i at lyskilder i scenen skal påvirke farven af vores textures. (burstene tegnes også efter haloerne, da haloerne ikke skal skygge for burstene) Da det ikke ser godt ud at lensflarene altid er der, også selvom kameraet er rettet langt væk fra solen, bruger vi -værdier til langsomt at fade quadsene ud, jo længere væk (x p,y p ) er fra (0,0). Samtidig bliver quadsne en smule mindre. Punktet (x p,y p ) var jo projektionen af solens position i 3D-rummet på xy-planen. Derfor har (x p,y p ) samme værdi hvis man ser i retningen af den modsatte vinkel mellem solen og xy-planen som hvis man ser på solen. Solen er på den positive side af xy-planet i denne scene, så for at der ikke kommer en lensflare fra ingenting når vi ser mod den omvendte vinkel, tegner vi ikke lensflaren hvis solens globale z<0. Et problem med dette er hvis vi ser direkte eller næsten direkte på solen. I dette tilfælde vil vores quads skygge for solen, da de bliver tegnet oven på den. Da det ikke er meningen at solen skal blive mørkere når man ser direkte på den, fader vi 18
20 quadsene ud jo tættere (x p,y p ) er på (0,0) når (x p,y p ) er indenfor en vis afstand fra (0,0). Når man ser direkte på solen bliver man som regel også blændet. Dette har vi efterlignet ved at lægge en hvid quad over skærmen. Den tegnes som det sidste i scenen, også efter selve lensflaren, så den dækker derfor alt i scenen. Denne quad har normalt =0 og er altså normalt ikke synlig. Men når (x p,y p ) kommer indenfor en vis afstand fra (0,0) skrues alfa værdien op, hvilket gør hele scenen lysere. Dette simulere altså at man bliver mere og mere blændet jo mere direkte man ser på solen. (igen gøres det kun hvis z>0) Figur: På disse screenshots er kameraet roteret så solen kommer tættere og tættere på midten af skærmen. Det ses at lensflaren bliver mere synlig jo tættere solen kommer på midtpunktet af skærmen, optil et vis trin, hvorefter den bliver mindre synlig igen. Det ses også at skærmen bliver lysere, efter et vis trin, jo mere direkte vi ser på solen. 19
21 Scene 3: Spring-mass Jelly Scene Nu hvor vi har lavet en 2 dimensionel spring-mass figur er det jo naturligt og ganske simpelt at udvide den til 3 dimensioner, sådan at vi får en kasse i stedet for et stykke stof. Det eneste der skal ændres er hvordan atomerne og fjedrene sættes op og hvordan polygonerne på overfladen af kassen tegnes (og dermed også hvordan vindkraften påvirker objektet, da den jo afhang af hvordan trekanterne i figuren blev placeret). Kun SpringmassScene og SpringSystem klasserne er ændret i forhold til før. Atom og Spring klasserne er præcis som før. Vores initielle n n n gitter sættes op som før, ved at forbinde naboerne til hinanden, bare det nu er et tredimensionelt gitter i stedet for et todimensionelt. Kassen har dog meget lettere ved at folde ind i sig selv i forhold til klædet, så for at forøge den strukturelle stabilitet en smule, har vi også forbundet nogle af genboerne til hinanden (vi har ikke forbundet diagonale genboer med hinanden). Figur: Initiel konfiguration hvor n=3. På dette screenshot kan man ikke se det, men nogle af genboerne er også forbundet. 20
22 Man kan igen tegne både figurens partikler og fjedre (gøres præcis som før) og tegne en texture på overfladen af kassen. Overfladen tegnes kun på de yderste 6 sider af kassen dvs. ikke mellem atomer inde i selve kassen. Vindkraften virker derfor også kun på de yderste 6 sider af kassen. I virkeligheden burde vinden jo blive stoppet af kassen og ændre retning når den ramte kassen. Dette sker dog ikke i vores implementation vinden går direkte igennem kassen og ud på den anden side. Denne scene var da også blot et hurtigt eksperiment med hvordan det ville se ud at udvide stoffet med en ekstra dimension, så den er ikke helt så finpudset. Kassen kan også stadig folde sig ind i sig selv, hvis man behandler den for hårdt (kunne sandsynligvis forbygges yderligere ved at forbinde flere genboer med hinanden). En positiv observation vi har gjort, er at selv en lille kasse ser flot ud, så man kan altså ganske billigt inkludere en skvulpende kasse af god kvalitet i sine projekter. Konklusion I dette projekt har vi lavet tre scener med forskellige partikel systemer. Den første scene viser et springvand der udsender vandpartikler, som udsættes for bl.a. tyngdekraft og vindpåvirkning. Som det kan ses i hjælpe funktionen til denne scene kan flere parametre ændres vha. bruger input. Dette inkluderer bl.a. vindretning, vandets spredning og vandets retning. Derudover har vi tilføjet en vandoverflade, som påvirkes af partiklerne der rammer overfladen. De to sidste scener er lavet som et springmass system. Scene 2 simulerer et stykke stof, mens scene 3 simulerer en geléagtig kasse, der kan ses som en udvidelse af stoffet med en ekstra dimension tilføjet. Ligesom scene 1 bliver disse objektet påvirket af bruger input og diverse kræfter. Til alle scenerne har vi tilføjet ekstra grafik og effekter for at tilføre lidt mere liv til dem. Vi har bl.a. tilføjet en skybox og lensflare til udendørsscenerne. Euler og Verlet metoderne er numerisk ustabile ved lav framerate og sætter derfor en begrænsning på antallet af partikler. Dette gav os en smule vanskeligheder i starten. Den lettelse måde at fremkalde denne ustabilitet i vores program, er at vælge scene 2 med et stort antal partikler, tegne partiklerne og skubbe lidt til dem. Et andet mindre problem vi havde i starten var at spring-mass systemet ikke tabte energien igen som den blev tilført. Problemet var, som beskrevet tidligere, at tyngdekraften og fjederkraften skiftevis dominerede hinanden, hvilket førte til at klædet hoppede op og ned uden at falde til ro. Dampening kraften blev tilføjet for at løse dette. 21
23 Vi har set, at hvis man har gennemsigtige objekter i en scene, er rækkefølgen objekterne renderes i vigtig. Vi tegner derfor de gennemsigtige objekter til sidst og sortere dem ift. deres z koordinat. Future Work Vi har ikke brugt meget tid på at optimere vores kode, men mere forsøgt at skrive den så den er forholdsvis letlæselig. Det er klart af den i sidste ende burde optimeres, men dette har ikke været vores hoved fokus. At den ikke er optimeret betyder bl.a. at spring-mass systemet, på langsommere computere, vil eksplodere hurtigere end det reelt burde, da t vil blive stor. Da klædet kan gå igennem sig selv og boxen kan folde sig ind i sig selv, kunne vi også se nærmere på collision detection mellem polygonerne de består af. Problemet kan dog i høj grad løses ved at forbinde flere atomer med hinanden via fjedre, som vi gjorde i den 3. scene. Flere steder på nettet, f.eks. på [2], har vi set billeder eller animationer hvor et fast objekt kolliderer med et klæde og derved påvirker positionerne af klædets atomer. Dette kunne også være spændende at se nærmere på. Vi havde oprindeligt snakket om, at oversætte partikel systemerne til GPU en, så det var vertex og fragment programmerne der lavede opdateringerne og renderingen. Vi har lavet små eksperimenter med, at lægge data op og opdatere partikler, men pga. tiden nåede vi ikke at gå i dybden med dette og valgte derfor til sidst at koncentrere os udelukkende om CPU en. Referencer [RTR] : Møller and Haines: Real-Time Rendering, second edition [RED]: Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis: OpenGL programming Guide, fifth edition [PMN]: Peter Møller-Nielsen: Parallel Programming 2006 (PP F06) Lecture notes [1]: OpenGL FAQ / 15 Transparency, Translucency, and Using Blending [2]: Cloths [3]: Alan Gordie: Lens Flare Tutorial [4]: Pixar: Physically Based Modeling [5]: Jonathan lonesock Dummer: A simple Time-Corrected Verlet Integration Method 22
Introduktion til Computer Grafik Projekt 1
Introduktion til Computer Grafik Projekt 1 Line Løfquist,Thor Prentow, Nikoline Vinkel Datalogisk Institut, Aarhus Universitet Åbogade 34, 8200 Aarhus N, Denmark 20071346, 20071952, 20071387 {u071346,prentow,u071387}@cs.au.dk
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
BAndengradspolynomier Et polynomium er en funktion på formen f ( ) = an + an + a+ a, hvor ai R kaldes polynomiets koefficienter. Graden af et polynomium er lig med den højeste potens af, for hvilket den
Her skal vi se lidt på de kræfter, der påvirker en pil når den affyres og rammer sit mål.
a. Buens opbygning Her skal vi se lidt på de kræfter, der påvirker en pil når den affyres og rammer sit mål. Buen påvirker pilen med en varierende kraft, der afhænger meget af buens opbygning. For det
Rapport Bjælken. Derefter lavede vi en oversigt, som viste alle løsningerne og forklarede, hvad der gør, at de er forskellige/ens.
Rapport Bjælken Indledning Vi arbejdede med opgaverne i grupper. En gruppe lavede en tabel, som de undersøgte og fandt en regel. De andre grupper havde studeret tegninger af bjælker med forskellige længder,
Kasteparabler i din idræt øvelse 1
Kasteparabler i din idræt øvelse 1 Vi vil i denne første øvelse arbejde med skrå kast i din idræt. Du skal lave en optagelse af et hop, kast, spark eller slag af en person eller genstand. Herefter skal
Tyngdekraft i Scratch
Tyngdekraft i Scratch Nogle gange er det nemmere at forstå nogle ting, når man ser det ske. Derfor kan vi nu prøve at lave et spil med tyngdekraft. Det gør også at man får nogle meget federe spil! 1) Figur
Skråplan. Esben Bork Hansen Amanda Larssen Martin Sven Qvistgaard Christensen. 2. december 2008
Skråplan Esben Bork Hansen Amanda Larssen Martin Sven Qvistgaard Christensen 2. december 2008 1 Indhold 1 Formål 3 2 Forsøg 3 2.1 materialer............................... 3 2.2 Opstilling...............................
Optimale konstruktioner - når naturen former. Opgaver. Opgaver og links, der knytter sig til artiklen om topologioptimering
Opgaver Opgaver og links, der knytter sig til artiklen om solsikke Opgave 1 Opgave 2 Opgaver og links, der knytter sig til artiklen om bobler Opgave 3 Opgave 4 Opgaver og links, der knytter sig til artiklen
Analytisk Geometri. Frank Nasser. 12. april 2011
Analytisk Geometri Frank Nasser 12. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er
Tredje kapitel i serien om, hvad man kan få ud af sin håndflash, hvis bare man bruger fantasien
Tredje kapitel i serien om, hvad man kan få ud af sin håndflash, hvis bare man bruger fantasien For nogen tid siden efterlyste jeg i et forum et nyt ord for håndflash, da det nok ikke er det mest logiske
Produkter af vektorer i 2 dimensioner. Peter Harremoës Niels Brock
Produkter af vektorer i dimensioner Peter Harremoës Niels Brock Septemer 00 Indledning Disse noter er skrevet som supplement og delvis erstatning for tilsvarende materiale i øgerne Mat B og Mat A. Vi vil
Matematik interne delprøve 09 Tesselering
Frederiksberg Seminarium Opgave nr. 60 Matematik interne delprøve 09 Tesselering Line Købmand Petersen 30281023 Hvad er tesselering? Tesselering er et mønster, der består af en eller flere figurer, der
Opgaver om koordinater
Opgaver om koordinater Formålet med disse opgaver er dels at træne noget matematik, dels at give oplysninger om og træning i brug af Mathcad: Matematik: Øge grundlæggende indsigt vedrørende koordinater
VEKTOR I RUMMET PROJEKT 1. Jacob Weng & Jeppe Boese. Matematik A & Programmering C. Avedøre-værket. Roskilde Tekniske Gymnasium 3.4. Fag.
VEKTOR I RUMMET PROJEKT 1 Fag Matematik A & Programmering C Tema Avedøre-værket Jacob Weng & Jeppe Boese Roskilde Tekniske Gymnasium 3.4 07-10-2010 1 Vektor i rummet INDLEDNING Projektet omhandler et af
Børn, unge og sundhed
Børn, unge og sundhed Automatisering Komm/IT Benjamin Andreas Olander Christiansen, Jens Werner Nielsen og Niclas Larsen Klasse 1.4 Roskilde Tekniske Gymnasium 30.4.2010 Indledning Som vores kommunikations-/informationsteknologis
Matematikken bag Parallel- og centralprojektion
Matematikken bag parallel- og centralojektion 1 Matematikken bag Parallel- og centralojektion Dette er et redigeret uddrag af lærebogen: Programmering med Delphi fra 2003 (570 sider). Delphi ophørte med
Relativitetsteori. Henrik I. Andreasen Foredrag afholdt i matematikklubben Eksponenten Thisted Gymnasium 2015
Relativitetsteori Henrik I. Andreasen Foredrag afholdt i matematikklubben Eksponenten Thisted Gymnasium 2015 Koordinattransformation i den klassiske fysik Hvis en fodgænger, der står stille i et lyskryds,
Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over. , og et punkt er givet ved: P (2, 1).
Plangeometri Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over Opgave 1 To linjer er givet ved ligningerne: x y 0 og x b y 4 0, hvor b er en konstant a) Beregn konstanten b således,
Bevægelses analyse med SkillSpector. Version 1.0 Sidste opdatering: 14/05-2008
Bevægelses analyse med SkillSpector Version 1.0 Sidste opdatering: 14/05-2008 Hvad er SkillSpector SkillSpector er software program til video baseret bevægelses analyse. Der er følgende muligheder med
Brydningsindeks af vand
Brydningsindeks af vand Øvelsesvejledning til brug i Nanoteket Udarbejdet i Nanoteket, Institut for Fysik, DTU Rettelser sendes til [email protected] 15. marts 2012 Indhold 1 Indledning 2 2 Formål
Kan vi fortælle andre om kernen og masken?
Kan vi fortælle andre om kernen og masken? Det kan vi sagtens. Mange mennesker kan umiddelbart bruge den skelnen og den klarhed, der ligger i Specular-metoden og i Speculars begreber, lyder erfaringen
Funktioner generelt. for matematik pä B- og A-niveau i stx og hf. 2014 Karsten Juul
Funktioner generelt for matematik pä B- og A-niveau i st og hf f f ( ),8 014 Karsten Juul 1 Funktion og dens graf, forskrift og definitionsmängde 11 Koordinatsystem I koordinatsystemer (se Figur 1): -akse
Egenskaber ved Krydsproduktet
Egenskaber ved Krydsproduktet Frank Nasser 12. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk:
for matematik på C-niveau i stx og hf
VariabelsammenhÄnge generelt for matematik på C-niveau i stx og hf NÅr x 2 er y 2,8. 2014 Karsten Juul 1. VariabelsammenhÄng og dens graf og ligning 1.1 Koordinatsystem I koordinatsystemer (se Figur 1):
Kom i gang-opgaver til differentialregning
Kom i gang-opgaver til differentialregning 00 Karsten Juul Det er kortsigtet at løse en opgave ved blot at udskifte tallene i en besvarelse af en tilsvarende opgave Dette skyldes at man så normalt ikke
Afstande, skæringer og vinkler i rummet
Afstande, skæringer og vinkler i rummet Frank Nasser 9. april 20 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her.
Matematik A studentereksamen
Xxxx Side 1 af 11 Opgave 7 Jeg aflæser af boksplottet for personbeskatningen i 2007 medianen til. Første og anden kvartil aflæser jeg til hhv. og. Den mindst observerede personbeskatning i år 2007 var
Øvelser i Begynderklassen.
Øvelser i Begynderklassen. 1 Her starter banen! Tidtagningen begynder, når dommeren kommanderer "Fremad". 2 Banen er slut - Tidtagningen stoppes 3* Højre sving. 90 skarp drejning til højre. Som ved normal
Starlab. En vejledning i brug og opsætning.
Starlab. En vejledning i brug og opsætning. Ovenfor ser vi Starlab sat op i en gymnastiksal. Til venstre ser vi elever og lærer se på Nordhimlens stjerner der er tilføjet de mytologiske figurer, som har
Afstande, skæringer og vinkler i rummet
Afstande, skæringer og vinkler i rummet Frank Villa 2. maj 202 c 2008-20. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Indhold
Udspring. - Inspiration til udspringsaktiviteter (svømmeskolen, tweens og teens)
Udspring - Inspiration til udspringsaktiviteter (svømmeskolen, tweens og teens) - Sikkerhed: Det første, man starter med at gøre, når man skal lave udspring med en gruppe, er at definere nogle færdselsregler,
Afstandsformlerne i Rummet
Afstandsformlerne i Rummet Frank Nasser 12. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk:
Individuelle kompetencer med bold (læringsmål)
Individuelle kompetencer med bold (læringsmål) 1. Løbe med bold (drible) 2. Retningsskift med bold 3. Rulle med bolden under fodsålen. 4. Korte rytmer med bold 5. Trække bold baglæns med fodsål 6. Sparke
Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over. 1, og et punkt er givet ved: (2, 1)
Plangeometri Hvis man ønsker mere udfordring, kan man springe de første 10 opgaver over. Opgave 1 To linjer er givet ved ligningerne: x y 0 og x b y 4 0, hvor b er en konstant. a) Beregn konstanten b således,
Rally Lydighed Øvelsesvejledning
Det primære i øvelserne er markeret med fed og kursiv. Begynderklassen 1 Her starter banen! Hunden behøver ikke at sidde inden start, men skal være i pladspositionen. Tidtagningen starter på dommerens
Michael Jokil 11-05-2012
HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...
Stx matematik B december 2007. Delprøven med hjælpemidler
Stx matematik B december 2007 Delprøven med hjælpemidler En besvarelse af Ib Michelsen Ikast 2012 Delprøven med hjælpemidler Opgave 6 P=0,087 d +1,113 er en funktion, der beskriver sammenhængen mellem
DKK Rally-lydighed, Øvede-klassen. 40. Fristende 8-tal
DKK Rally-lydighed, Øvede-klassen. 40. Fristende 8-tal Øvelsen består af 2 madskåle eller lignende fristelser samt 2 kegler, stolper eller personer og der skal gås et 8-tal rundt om de to yderste kegler.
INTRODUKTION TIL VEKTORER
INTRODUKTION TIL VEKTORER x-klasserne Gammel Hellerup Gymnasium 1 Indholdsfortegnelse HVORFOR INDFØRES VEKTORER?... 3 VEKTORER... 5 Vektoraddition... 7 Kræfternes parallelogram... 9 Multiplikation af vektor
Dokumentation af programmering i Python 2.75
Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt
GRAFIK OG BILLEDREDIGERING
GRAFIK OG BILLEDREDIGERING 2 VEKTOR TEGNINGER I ILLUSTRATOR OM TEGNINGERNE Jeg har lavet en serie af små mænd, som jeg derefter har fået printet på tykt papir og lamineret, og bruger som bogmærke. SYMETRI
Talrækker. Aktivitet Emne Klassetrin Side
VisiRegn ideer 3 Talrækker Inge B. Larsen [email protected] INFA juli 2001 Indhold: Aktivitet Emne Klassetrin Side Vejledning til Talrækker 2-4 Elevaktiviteter til Talrækker 3.1 Talrækker (1) M-Æ 5-9 3.2 Hanoi-spillet
SEB Next Generation er en målrettet indsats i samarbejde med DTF og tennisklubberne. Omdrejningspunktet er det Internationale Tennisforbunds
Dette Play & Stay øvelseshæfte er målrettet alle aldersgrupper og niveauer inden for tennissporten. For at give alle tennisspillere en sjov og udfordrende tilgang til tennis, er hæftet inddelt i Play &
HJÆLP TIL FILM-X ANIMATIONSVÆRKTØJ
HJÆLP TIL FILM-X ANIMATIONSVÆRKTØJ Når du bruger FILM-X animationsværktøjet har du hele tiden adgang til at få hjælp. Hjælpeboksen ligger i højre side af skærmen og den kan ses her nedenfor. Hjælpen er
Newtons love - bevægelsesligninger - øvelser. John V Petersen
Newtons love - bevægelsesligninger - øvelser John V Petersen Newtons love 2016 John V Petersen art-science-soul Indhold 1. Indledning og Newtons love... 4 2. Integration af Newtons 2. lov og bevægelsesligningerne...
Praktisk træning. Bakke. & bagpartskontrol. 16 Hund & Træning
Praktisk træning Tekst: Karen Strandbygaard Ulrich Foto: jesper Glyrskov, Christina Ingerslev & Jørgen Damkjer Lund Illustrationer: Louisa Wibroe Bakke & bagpartskontrol 16 Hund & Træning Det er en fordel,
Indholdsfortegnelse. Indholdsfortegnelse.. side 2. Adgang til webgraf 3. Opslag adresse... 4. Styring af layout.. 5. Zoom funktioner..
Indholdsfortegnelse Indholdsfortegnelse.. side 2 Adgang til webgraf 3 Opslag adresse... 4 Styring af layout.. 5 Zoom funktioner.. 6 Panorere på skærmen. 7 Information om grafikken.... 8-10 Print et udsnit.....
Bekrig Klonerne. Introduktion. Scratch. I dette projekt skal du lære, hvordan du laver et spil, hvor du skal redde Jorden fra monstre i rummet.
Scratch 2 Bekrig Klonerne All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club.
Gymnasieøvelse i Skanning Tunnel Mikroskopi (STM)
Gymnasieøvelse i Skanning Tunnel Mikroskopi (STM) Institut for Fysik og Astronomi Aarhus Universitet, Sep 2006. Lars Petersen og Erik Lægsgaard Indledning Denne note skal tjene som en kort introduktion
Fingerslagskast og baggerslagskast
Fingerslagskast og baggerslagskast Fingerslagskast og baggerslagskast er begge forøvelser til det færdige finger- og baggerslag. Her under følger en række øvelser, hvor fokus er lagt på netop disse to
Vektorer og lineær regression
Vektorer og lineær regression Peter Harremoës Niels Brock April 03 Planproduktet Vi har set, at man kan gange en vektor med et tal Et oplagt spørgsmål er, om man også kan gange to vektorer med hinanden
Fra tilfældighed over fraktaler til uendelighed
Fra tilfældighed over fraktaler til uendelighed Tilfældighed Hvor tilfældige kan vi være? I skemaet ved siden af skal du sætte 0 er og 1-taller, ét tal i hvert felt. Der er 50 felter. Du skal prøve at
Rally Lydighed Øvelsesbeskrivelser 2014 Begynderklassen
1. Start Rally Lydighed Begynderklassen I begynderklassen er hunden i snor og skal føres i løs line. På hele banen bliver kontakten mellem hund og fører bedømt, herunder at hunden holder pladspositionen.
DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes
Vektorer og lineær regression. Peter Harremoës Niels Brock
Vektorer og lineær regression Peter Harremoës Niels Brock April 2013 1 Planproduktet Vi har set, at man kan gange en vektor med et tal. Et oplagt spørgsmål er, om man også kan gange to vektorer med hinanden.
Matematikprojekt Belysning
Matematikprojekt Belysning 2z HTX Vibenhus Vejledning til eleven Du skal nu i gang med matematikprojektet Belysning. Dokumentationen Din dokumentation skal indeholde forklaringer mm, således at din tankegang
Rally Lydighed Oversigt 2014
Det primære i øvelserne er markeret med fed og kursiv. Nr. Skilt 1 2 3* 4* 5* 6* 7* 8* 9 10 11 Øvelse Begynderklassen Start. Her starter banen! Hunden behøver ikke at sidde inden start, men skal være i
GEM. Brugervejledning DANSK OVERSÆTTELSE AF INSTRULOG A/S. Freedom Scientific, Inc. 440640-001 Rev. A
GEM Brugervejledning DANSK OVERSÆTTELSE AF INSTRULOG A/S Freedom Scientific, Inc. 440640-001 Rev. A UDGIVET AF Freedom Scientific - www.freedomscientific.com Dansk udgave af Instrulog A/S www.instrulog.dk
Matematik C. Cirkler. Skrevet af Jacob Larsen 3.år HTX Slagelse Udgivet i samarbejde med Martin Gyde Poulsen 3.år HTX Slagelse.
Cirkler Skrevet af Jacob Larsen 3.år HTX Slagelse Udgivet i samarbejde med Martin Gyde Poulsen 3.år HTX Slagelse Side Indholdsfortegnelse Cirklen ligning Tegning af cirkler Skæring mellem cirkel og x-aksen
Nordisk Matematikkonkurrence. samt Danmarks Matematiklærerforening. Skoleåret 2008 2009 Opgaver ved semifinalen
Opgave 1 Opdeling af figur I har fået udleveret et ark med syv regulære sekskanter. Inddel dem i 6 6 på syv forskellige måder. Det er kun tilladt at bruge rette linjer. Nedenfor kan I se en af måderne
Prøveudtagning i forbindelse med bestemmelse af fugt i materialer
Prøveudtagning i forbindelse med bestemmelse af fugt i materialer Når du skal indsende prøver af materiale til analyse i Teknologisk Instituts fugtlaboratorium, er det vigtigt, at du har udtaget prøverne
Start. 1 Her starter banen! Hunden behøver ikke at sidde inden start, men skal være i pladspositionen. Tidtagningen starter på dommerens kommando fx.
Start. 1 Her starter banen! Hunden behøver ikke at sidde inden start, men skal være i pladspositionen. Tidtagningen starter på dommerens kommando fx. Fremad. Stå. Teamet stopper og hunden dirigeres til
Søren Christiansen 22.12.09
1 2 Dette kompendie omhandler simpel brug af Excel til brug for simpel beregning, såsom mængde og pris beregning sammentælling mellem flere ark. Excel tilhører gruppen af programmer som samlet kaldes Microsoft
Matematisk modellering og numeriske metoder. Lektion 13
Matematisk modellering og numeriske metoder Lektion 3 Morten Grud Rasmussen 9. november 25 Divergens af et vektorfelt [Sektion 9.8 og.7 i bogen, s. 43]. Definition af og og egenskaber for divergens Lad
Velkommen til IT for let øvede
Velkommen til IT for let øvede Kursus er hjælp til selvhjælp og I får mest ud af det, hvis I også derhjemme afsætter nogle timer til øvelser på jeres computer. Vi sørger for hjemmeopgaver!! Der er masser
Brøk Laboratorium. Varenummer 72 2459
Brøk Laboratorium Varenummer 72 2459 Leg og Lær om brøker Brøkbrikkerne i holderen giver brugeren mulighed for at sammenligne forskellige brøker. Brøkerne er illustreret af cirkelstykker som sammenlagt
KØBENHAVNS UNIVERSITET NATURVIDENSKABELIG BACHELORUDDANNELSE
KØBENHAVNS UNIVERSITET NATURVIDENSKABELIG BACHELORUDDANNELSE Fysik 2, Klassisk Mekanik 2 Skriftlig eksamen 23. januar 2009 Tilladte hjælpemidler: Medbragt litteratur, noter og lommeregner Besvarelsen må
Kom godt i gang med Fable-robotten
Kom godt i gang med Fable-robotten 1. Først skal du installere programmet på din computer. Gå ind på shaperobotics.com og under support vælger du download: Her vælger du, under PC App om du kører Windows
De 5 klassiske fotofejl. Fejl 1 Du er for langt væk. Fejl 2 Du er for doven. Fejl 3 Du tager altid dit foto horisontalt
Indholdsfortegnelse De 5 klassiske fotofejl Fejl 1 Du er for langt væk Fejl 2 Du er for doven Fejl 3 Du tager altid dit foto horisontalt Fejl 4 Du tjekker ikke hele motivet Fejl 5 Du bruger din flash forkert
Skiverod, hjerterod eller pælerod
Træernes skjulte halvdel III Skiverod, hjerterod eller pælerod Den genetiske styring af rodsystemernes struktur er meget stærk. Dog modificeres rodarkitekturen ofte stærkt af miljøet hvor især jordbund
Anamorphic Widescreen
Anamorphic Widescreen Fuldskærm og widescreen For at kunne forklare hvad anamorphic widescreen egentlig er, vælger jeg at starte helt fra begyndelsen af filmhistorien. Som alle nok ved så er billedformatet
Stafet eller bare lille leg. Gå med lukkede øjne og sådan man sætter foden ned umiddelbart foran den anden. (Hæl rører anden fods tå).
Motorik - aktiviteter Her er forskellige udfordrende og sjove øvelser/aktiviteter, som også kan bruges til at krydre andre aktitviteter med. f.eks. gøre dem sjovere eller sværere. De er gode og kan bruges
Placering for en målmand: Ny og uerfaren.
MÅLMANDS ØVELSER Placering for en målmand: Ny og uerfaren. Stå i udgangsstilling med arme oppe hele tiden mens modstander kører bolden rundt. Arme skal falde naturligt med ned med spændte håndled (når
Jeg ville udfordre eleverne med en opgave, som ikke umiddelbar var målbar; Hvor høj er skolens flagstang?.
Hvor høj er skolens flagstang? Undersøgelsesbaseret matematik 8.a på Ankermedets Skole i Skagen Marts 2012 Klassen deltog for anden gang i Fibonacci Projektet, og der var afsat ca. 8 lektioner, fordelt
Kort om Eksponentielle Sammenhænge
Øvelser til hæftet Kort om Eksponentielle Sammenhænge 2011 Karsten Juul Dette hæfte indeholder bl.a. mange småspørgsmål der gør det nemmere for elever at arbejde effektivt på at få kendskab til emnet.
Det skrå kast, en simulation
Det skrå kast, en simulation Oplæg skrevet af Bartlomiej Rohard Warszawski den 5.november 29 Formål Eleven skal lave et program i Python, der udfører en simpel simulation af acceleration, hastighed, position,
Lavet af Ellen, Sophie, Laura Anna, Mads, Kristian og Mathias Fysikrapport blide forsøg Rapport 6, skråt kast med blide Formål Formålet med f
Rapport 6, skråt kast med blide Formål Formålet med forsøget er at undersøge det skrå kast, bl.a. med fokus på starthastighed, elevation og kastevidde. Teori Her følger der teori over det skrå kast Bevægelse
GrundlÄggende variabelsammenhänge
GrundlÄggende variabelsammenhänge for C-niveau i hf 2014 Karsten Juul LineÄr sammenhäng 1. OplÄg om lineäre sammenhänge... 1 2. Ligning for lineär sammenhäng... 1 3. Graf for lineär sammenhäng... 2 4.
Vektorregning. Vektorer som lister
10 Vektorregning Vektorer som lister En vektor laves nemmest som en liste på TI-89 Titanium / Voyage 200. I nedenstående skærmbillede ser du, hvordan man definerer vektorer og laver en simpel udregning
Kræfter og Arbejde. Frank Nasser. 21. april 2011
Kræfter og Arbejde Frank Nasser 21. april 2011 c 2008-2011. Dette dokument må kun anvendes til undervisning i klasser som abonnerer på MatBog.dk. Se yderligere betingelser for brug her. Bemærk: Dette er
Fable Kom godt i gang
Fable Kom godt i gang Opdateret: 26-03-2018 Indholdsfortegnelse 1. Først skal du installere programmet på din computer 3 2. Når programmet er installeret er du klar til at pakke robotten ud 4 3. Nu er
Vektorfunktioner. (Parameterkurver) x-klasserne Gammel Hellerup Gymnasium
Vektorfunktioner (Parameterkurver) x-klasserne Gammel Hellerup Gymnasium Indholdsfortegnelse VEKTORFUNKTIONER... Centrale begreber... Cirkler... 5 Epicykler... 7 Snurretoppen... 9 Ellipser... 1 Parabler...
Kom hurtigt i gang. med. FloorPlan 3D. FloorPlan 3D er et program med mange anvendelsesmuligheder!
Kom hurtigt i gang med FloorPlan 3D FloorPlan 3D er et program med mange anvendelsesmuligheder! Formålet med denne guide, er at give et overblik over de grundlæggende funktioner i FloorPlan 3D og at få
Trigonometri. Store konstruktioner. Måling af højde
Trigonometri Ordet trigonometri er sammensat af de to ord trigon og metri, hvor trigon betyder trekant og metri kommer af det græske ord metros, som kan oversættes til måling. Så ordet trigonometri er
Computerens Anatomi Af Mathias og Mark
Computerens Anatomi Af Mathias og Mark Planlægning af projekt Case Størstedelen af nutidens unge har deres egen smartphone, computer og fjernsyn. Computere i alle afskygninger bliver fortsat en større
