Kort introduktion till POV-Ray, del 6

Relevanta dokument
Kort introduktion till POV-Ray, del 5

Kort introduktion till POV-Ray, del 7

Kort introduktion till POV-Ray, del 3

Kort introduktion till POV-Ray, del 1

Robotarm och algebra

Lösning av trigonometriska ekvationer

i LabVIEW. Några programmeringstekniska grundbegrepp

Inledande programmering med C# (1DV402) Summera med while"-satsen

Visual Basic, en snabbgenomgång

Klassdeklaration. Metoddeklaration. Parameteröverföring

Statistiska samband: regression och korrelation

LÖSNINGSFÖRSLAG TENTAMEN

Mattekollen. Mattekollen 1. Mattekollen 3. Mattekollen 2. 6 Mål för kapitlet. 156 mattekollen. För att avsluta kapitlet

Här hittar du ett exempel på ritprogrammet:

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Kap 5.7, Beräkning av plana areor, rotationsvolymer, rotationsareor, båglängder.

Objektorienterad programmering Föreläsning 2

Beräkningsvetenskap föreläsning 2

Vi börjar med en penna som ritar när du drar runt den på Scenen.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Användarhandledning Version 1.2

Tynker gratisapp på AppStore

TDIU01 - Programmering i C++, grundkurs

MMA132: Laboration 2 Matriser i MATLAB

Data, typ, selektion, iteration

Extramaterial till Matematik Y

Booleska variabler och översättning mellan programuttryck och booleska variabler

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Vilken skillnad gör det var du placerar det? Prova båda.

2 februari 2016 Sida 1 / 23

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Inociell Lösningsmanual Endimensionell analys. E. Oscar A. Nilsson

2D1339 Programkonstruktion för F1, ht 2003

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Objektorienterad programmering i Java

Objektorientering: Lagring och livstid

2. Avgör om x och z är implicit definierade som funktion av y via följande ekvationssystem. x 3 + xy + y 2 + z 2 = 0 x + x 3 y + xy 3 + xz 3 = 0

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Matlabövning 1 Funktioner och grafer i Matlab

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

Programmeringsteknik med C och Matlab

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

En kort text om programmering i C.

Villkor if, switch. F2: Styrstrukturer, programmeringsteknik (kap. 3 4) If-kommando forts. If-kommando forts.

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

JavaScript del 3 If, Operatorer och Confirm

Fuzzy Logic. När oskarpa definitioner blir kristallklara. Åsa Svensson. Linköpings Universitet. Linköping

Matlabövning 1 Funktioner och grafer i Matlab

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Koda ett mattetest 3 av 5. Lektionen handlar om att göra en variabel i programmet för ett multiplikationstest. Koda ett mattetest 3 av 5

4-10 Rymdgeometri fördjupning Namn:..

Känguru 2012 Student sid 1 / 8 (gymnasiet åk 2 och 3) i samarbete med Jan-Anders Salenius vid Brändö gymnasiet

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

Övningsuppgifter till föreläsning 2 Variabler och uttryck

TANA17 Matematiska beräkningar med Matlab

a) 4a + a b) 4a 3a c) 4(a + 1)

REPETITION 2 A. a) 4a + a b) 4a 3a c) 4(a + 1)

SF1669 Matematisk och numerisk analys II Bedömningskriterier till tentamen Torsdagen den 4 juni 2015

kl Tentaupplägg

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

Fall 1 2x = sin 1 (1) + n 2π 2x = π 2 + n 2π. x = π 4 + n π. Fall 2 2x = π sin 1 (1) + n 2π. 2x = π π 2 + n 2π

TAIU07 Matematiska beräkningar med Matlab

Objektorienterad programmering Föreläsning 4

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Övningar i 2D2050. Per-Anders Staav (kallas Pa) Epost: eller

Arbetsblad 3:1. Vika kuber. 1 a) Figuren ska vikas till en kub. b) Vilken av figurerna kan. 2 Vilka av figurerna kan du vika till en kub?

Föreläsning 6: Introduktion av listor

Matematik EXTRAUPPGIFTER FÖR SKOLÅR 7-9

Objektorientering: Lagring, räckvidd och livstid

SMD 134 Objektorienterad programmering

Digitalt lärande och programmering i klassrummet

Produktrapport. Matematikförberedelser för nya Tekniska fysiker

2-1: Taltyper och tallinjen Namn:.

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

f(x, y) = ln(x 2 + y 2 ) f(x, y, z) = (x 2 + yz, y 2 x ln x) 3. Beräkna en vektor som är tangent med skärningskurvan till de två cylindrarna

TANA17 Matematiska beräkningar med Matlab

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Kort om programmering i Matlab

Tentamen IX1304 Matematik, Analys , lösningsidéer

SF1625 Envariabelanalys

Läsanvisningar till kapitel 4 i Naturlig matematik

Koordinatsystem och Navigation

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Lathund för spel med karta

Lösningsförslag Inlämningsuppgift 1 elstatikens grunder

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Talmängder. Målet med första föreläsningen:

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

3-8 Proportionalitet Namn:

Logik och kontrollstrukturer

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Vi människor föds in i en tredimensionell värld som vi accepterar och

Begreppen "mängd" och "element" är grundläggande begrepp i matematiken.

3D-TEKNIKENS GRUNDER JOHAN JÖNSSON

Transkript:

Kort introduktion till POV-Ray, del 6 Kjell Y Svensson, 2004,2007-03- 14 Detta avsnitt kommer att bli en liten lathund till hur man gör saker snabbare med mindre skrivande. Koppla dock inte ur hjärnan för det kommer finnas saker som #declare och #while för att inte tala om matematikens kusiner sinus och cosinus. Och eftersom det är avsnitt 6 så tar vi även upp en ny sexig objektform torus. Lata tips Det är inte nödvändigt att skriva color i en pigment-beskrivning, utan man kan skriva Pigment { Red direkt. Man behöver inte skriva ut nollan vid decimal-tal, utan 0.01 kan skrivas som enbart.01. Rotation kring en axel, tex 90 grader kring y-axeln har jag tidigare beskrivit som rotate <0,90,0>, detta kan förkortas till rotate y*90. Om man vill skala lika i x,y och z-led, tex skala upp en faktor 2, så kan man istället för att skriva scale <2,2,2> bara skriva scale 2. Loopar En mycket bra och arbetsbesparande finess i POV-Ray är möjligheten att beskriva loopar, dvs en aktivitet som görs flera gången, men bara behöver beskrivas en gång. Antag att vi i vår scen vill ha 10 lika sfärer. Då kan vi istället för att göra 10 sfärer beskriva en sfär och skapa en loop som gör att det blir 10 stycken. Loopar skapas genom att deklarerar en loop-variabel med uttrycket #declare variablename = 0; Därefter bildas loopen mellan uttrycket #while och. Vi tittar på hur det ser ut i beskrivningen. Innan måste loop-variabeln räknas upp så att villkoret counter < 10 blir falskt när counter blir 10. #declare counter = 0; #while (counter < 10) pigment { Red #declare counter = counter + 1;

Figur 6-1. Loop med 10 röda sfärer Vad gick fel med denna loop? Vi ser ju bara en sfär när vi trodde att vi skapade 10 stycken. Det finns en logisk förklaring, visst vi skapade 10 sfärer, man alla på samma position. Vi måste förflytta sfären som skapas i loopen, och det kan vi göra med en translate som tar loopräknaren counter till sin hjälp. Tips 12. Om det POV-Ray tar en evighet på sig att beräkna en scen, kontrollera då att du verkligen räknar upp loop-variabeln i varje varv av loopen. Vi modifierar loop till detta. #declare counter = 0; #while (counter < 10) pigment { Red translate <counter * 0.5, 0,0> #declare counter = counter + 1; Figur 6-2. Loop med 10 förflyttade sfärer Detta var väl vad vi förväntade oss, inte sant, men nu när vi har blivit varma i kläderna låt oss fortsätta. Varför inte skapa sfärerna i en ring. Det är nu vi kommer fram till er värsta mardröm, vi måste använda oss av de förskräckliga kusinerna sinus och cosinus. Du trodde väl aldrig att du skulle få någon nytta av dem, eller hur. I loopen förflyttar vi sfärerna både

längs X-axeln och Y-axeln, och vi förflyttar oss 36 grader per varv i loopen. För att förstå vad som händer kan du söka på sinus och cosinus på nätet, det finns säkert någon bra introduktion. #declare counter = 0; #while (counter < 11) pigment { Red translate <sin(36*counter),0.5 +cos(36*counter),0> #declare counter = counter + 1; Figur 6-3. 11 sfärer i en ring Nu när vi kan skriva en enkel loop, varför inte gå vidare skriva en loop inuti en loop, och på så sätt skapa figurer i ett två-dimensionellt mönster. Låt oss test och skapa en uppställd hop av krigiska sfärer. #declare Xcounter = 0; #while (Xcounter < 10) #declare Zcounter = 0; #while (Zcounter < 10) pigment { Red translate <Xcounter* 0.5, 0, Zcounter*0.5> #declare Zcounter = Zcounter + 1; #declare Xcounter = Xcounter + 1;

Figur 6-4. 100 sfärer i perfekt formation Eller varför inte 10 000 sfärer som väller fram in i en enda lång ström. Figur 6-5. 10 000 sfärer i en lång kö. Eller varför inte 1 miljon sfärer. Du förstår kanske potentialen för att skapa många objekt med några få raders beskrivning. Jag ska avsluta denna orgie i att skapa röda sfärer med att visa hur man kan skapa dem i 3 dimensioner med följande loop. #declare Xcounter = 0; #while (Xcounter < 10) #declare Zcounter = 0; #while (Zcounter < 10) #declare Ycounter = 0; #while (Ycounter < 10) pigment { Red translate <Xcounter* 0.5, Ycounter*0.5, Zcounter*0.5> #declare Ycounter = Ycounter + 1; #declare Zcounter = Zcounter + 1; #declare Xcounter = Xcounter + 1;

Figur 6-6. Kub med 10x10x10 sfärer Proffs-tips 2. Indentera alltid en loop så att du ser vilka #while som hör ihop med vilka. Vid långa looper, skriv då en kommentar efter #while och som visar vilka som hör ihop. Det finns mera möjligheter i POV-Rays programspråk, men det återkommer jag till i senare avsnitt. Glöm inte att avsnitt 256 kommer att avslöja hur man verkligen använder sig av POV- Ray. Torus En torus är formad precis som en badring, dvs en rund ring. Denna form finns inbyggd för att den är rätt så svår att beskriva med andra former. En torus definieras av två mätt, radien på själva ringen och radien på ringen som utgör kroppen på torusen. Ett exempel på en smal torus. torus { 4,.5 // ringens radie, kroppens radie rotate -90*x // rotation så vi kan se den från sidan pigment { Yellow Figur 6-7. Smal torus Om vi ändrar till torus { 4, 2 så ser torusen ut så här, så nu är det kanske mera klart vilket mått som påverkar vad.

Figur 6-7 med torus { 4,2 Och som final i detta avsnitt, en massa ringar. union { #declare Xcounter = 0; #while (Xcounter < 10) #declare Zcounter = 0; #while (Zcounter < 10) #declare Ycounter = 0; #while (Ycounter < 10) torus { 4, 0.6 rotate -90*x scale 0.1 translate <Xcounter* 0.7, Ycounter*0.7, Zcounter*2> #declare Ycounter = Ycounter + 1; #declare Zcounter = Zcounter + 1; #declare Xcounter = Xcounter + 1; pigment { BrightGold finish { phong 1 phong_size 100 Notera att jag lägger en union runt hela loopen. Detta gör att jag kan ange pigment och finish för alla object på en gång, vilket också gör att beräkandet av scenen går snabbare och kräver mindre minne.

Figur 6-8. Torus i ett tre-dimensionellt mönster. Nästa del, del 7 kommer att handla om slumpen, vi ska lära oss skriva och så undersöker vi några fler fördefinierade mönster i stil med schack vi sett tidigare.