Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Relevanta dokument
Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Programmeringsuppgift Game of Life

MMA132: Laboration 2 Matriser i MATLAB

Matriser och vektorer i Matlab

Instruktion för laboration 1

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

Beräkningsvetenskap föreläsning 2

Matriser och vektorer i Matlab

Matriser och linjära ekvationssystem

Lösningar till tentamen i EIT070 Datorteknik

Konvexa höljet Laboration 6 GruDat, DD1344

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Grafik. TDDC66 Datorsystem och programmering Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Linjär algebra. 1 Inledning. 2 Matriser. Analys och Linjär Algebra, del B, K1/Kf1/Bt1. CTH/GU STUDIO 1 TMV036b /2013 Matematiska vetenskaper

Klassdeklaration. Metoddeklaration. Parameteröverföring

Programmeringsteknik med C och Matlab

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Matriser och linjära ekvationssystem

kl Tentaupplägg

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

INSTÄLLNINGAR FÖR IRONCADS 2D-RITNING

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

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

Extramaterial till Matematik Y

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Programmeringsteknik I

Introduktion till MATLAB, med utgångspunkt från Ada

Matriser och Inbyggda funktioner i Matlab

Instruktion för laboration 1

2D1339 Programkonstruktion för F1, ht 2003

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Beräkningsverktyg HT07

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Användarhandledning Version 1.2

Linjära ekvationssystem i Matlab

Föreläsning 2, vecka 8: Repetition

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Hemuppgift 1, SF1861 Optimeringslära för T

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Föreläsning 6: Metoder och fält (arrays)

Föreläsning 9-10 Innehåll

Laboration 4: Digitala bilder

Laboration 0: Del 2. Benjamin Kjellson Introduktion till matriser, vektorer, och ekvationssystem

TMV166 Linjär algebra för M. Datorlaboration 2: Matrisalgebra och en mekanisk tillämpning

Vektorgeometri för gymnasister

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

Laboration: Grunderna i MATLAB

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Uppgift 1 ( Betyg 3 uppgift )

Linjära ekvationssystem

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Föreläsning 6: Introduktion av listor

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Tentamen ges för: Tentamensdatum: Tid:

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TDDC77 Objektorienterad Programmering

Kapitel 15: Data/Matrix Editor

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

TSBB14 Laboration: Intro till Matlab 1D

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

Uppgift 1 (grundläggande konstruktioner)

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

Ekvivalensrelationer

Laboration: Vektorer och matriser

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

729G04 Programmering och diskret matematik. Python 3: Loopar

ENKEL Programmering 3

Objektorienterad programmering Föreläsning 2

Newtons metod och arsenik på lekplatser

i=1 c i = B och c i = a i eller c i = b i för 1 i n. Beskriv och analysera en algoritm som löser detta problem med hjälp av dynamisk programmering.

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

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

Lösningar till tentamen i EIT070 Datorteknik

SKAPA TRYCKFILER FRÅN MICROSOFT POWERPOINT 2007

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

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Föreläsning 3-4 Innehåll

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

Macromedia Flash MX 2004

Uppgifter för Textil vecka 8, 2015

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TANA17 Matematiska beräkningar med Matlab

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

Parameteröverföring. Exempel. Exempel. Metodkropp

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Transkript:

Grunderna i C++ ARK 385: Virtuella Verktyg i en Materiell värld AT Arkitektur & Teknik Chalmers Tekniska Högskola 2009 - Kursen skapades (3 förel.) 2010-6 förel. + 2 projekt 2011-8 förel. Helt omarbetade övningar & Arkitektur Teknik - Chalmers T A Tekniska Högskola i j Skapad av Matz Johansson BergströmLIMY matz.johansson@chalmers.se

Innehållsförteckning I 1 Wrap-up Repetition Schema Vad vi går igenom idag 2 C++ del 4 Nästlade for slingor Introduktion till OpenGL GLUT Användning av OpenGL DXF Syntax Kaos Game of Life L-System (extra) Övningar Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 2 / 23

Wrap-up Repetition Vad lärde vi oss förra gången? ˆ Slumptal ˆ Skrivning till fil ˆ for loopar Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 4 / 23

Wrap-up Schema Uppdaterat schema Kursen har fått två extra tillfällen. Det nya schemat: Tillfälle Datum Övningar 1 5/10 1 2 12/10 2 3 2/11 3 4 9/11 4 5 14/11 5 6 16/11 Processing/Projekt 1 7 21/11 Processing/Projekt 2 8 23/11 Buffert Om ni har håltimmar och är överrens att vi flyttar kursen någon timma eller två så är det ok för mig. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 5 / 23

Wrap-up Vad vi går igenom idag Vad lär vi oss idag? Idag: ˆ DXF formatet ˆ Nästlade for loopar ˆ Lite om OpenGL ˆ Cellulära automater (Game of Life) ˆ L-System (extra) Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 6 / 23

Nästlade for slingor Nästlade for-loopar Vi har tidigare gått igenom While slingor, sedan ett sätt att konvertera detta till for slingor. Nu skall vi se exempel på hur man kan använda nästlade for slingor, dvs. for slinga inuti en annan for slinga. Säg att vi vill utföra en vanlig Matlab uträkning, matrix-vektor multiplikation Ax = b, i C++. Följande visar hur vi gör i Matlab: A = [ 1, 2 ; 3, 4 ; 5, 6 ] ; x = [ 2, 3 ] ' ; b = zeros ( 1, 3) ; >> b = A*x Matrisberäkning i Matlab Matlab är speciellt utformat för att göra detta snabbt och enkelt. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 8 / 23

Nästlade for slingor Matriser med nästlade for slingor En matris i C++ kan skrivas som ett 2-dimensionellt fält. Notera att vi inte (behöver) transponera b. int A [ 2 ] [ 2 ] = { {1, 2}, {4, 5} } ; int x [ 2 ] = {2, 3 } ; int b [ 2 ] = {0, 0 } ; // måste i n i t i e r a a n n a r s f å r v i s k r ä p... här 2d fält i C++. För själva matris-vektor multiplikationen kan vi tänka i flera steg, nästa sida visar själva idén bakom slingorna och hur man kan tänka när man skriver kod. Indexing är nu a[i][j] där i avser rad och j kolonn, så a[0][1] ger elementet 2 (OBS: index från 0). ( ) A[0][0] A[0][1] } A[1][0] A[1][1] {{ } A Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 9 / 23

Nästlade for slingor Så, för matris/vektor multiplikation med följande symboler får vi ( ) ( ) ( ) α β x1 αx1 + βx 2 = γ δ x 2 γx 1 + δx 2 }{{}}{{}}{{} A x b ˆ I hur många dimensioner måste vi stega? 2, kolonn och rad i matrisen A. ˆ Vi går igenom x:s element för varje rad i resultatet b j ˆ Vi går igenom kolonnerna i A, alltså A[?][j]x[j]. ˆ Om vi tittar på b så ser vi b[0]=αx 1 + βx 2 ˆ Vi ser att index i b beror på raden i A i. ˆ b[i] = A[i][j]x[j] ˆ Men nu får vi endast b[0] = βx 1 Vi måste summera a:s kolonnelement med x:s radelement ˆ b[i] += A[i][j]x[j]; for ( int i=0; i <2; i++) for ( int j=0; j <2; j++) b [ i ] += A [ i ] [ j ] * x [ j ] ; Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 10 / 23

Introduktion till OpenGL OpenGL Open Graphics Library En specifikation/standard som innehåller över 250 funktioner för att rita 2d och 3d primitiver samt ljussättning (ej skuggor)... ˆ Skapades av Silicon Graphics 1992 ˆ Används idag i CAD, VR, Vetenskaplig visualisering, spel... ˆ Abstraherar bort från grafikhårdvaran ˆ Väldokumenterat (the red book) www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 11 / 23

Introduktion till OpenGL GLUT För att kunna utnyttja standarden OpenGL måste vi ladda ner ett bibliotek med rutiner som stöder vår maskinvara, en av dessa heter GLUT. Om GLUT:...is a OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. GLUT är alltså en samling verktyg som gör att vi kan skriva OpenGL-kod i Windows (och andra plattformar). Det första vi måste göra är att importera biblioteket för GLUT: #include <GL/glut.h> Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 12 / 23

Introduktion till OpenGL Lite om användning Jag kommer bara förklara grunderna i OpenGL (eftersom det är så stort). För att kunna rita nåt i fönstret måste vi definiera vad vi vill rita, detta gör man med glbegin(mode); och glend(mode);. mode är en konstant som beskriver hur punkterna man ger OpenGL skall tolkas. mode = GL QUADS, GL POINTS eller GL LINES (finns fler) Man definierar noder med: glvertex3f(x,y,z) För att det skall se lite trevligare ut kan vi färglägga dessa noder : glcolor3f(r,g,b) där R, G, B [0, 1] (Rött Grönt Blått). Vi skall prata mer om detta i nästa föreläsning där vi kommer ägna oss åt ett mini-projekt och göra detta i OpenGL alternativt rendera resultatet i Rhino. Se även: www. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 13 / 23

DXF DXF DXF (Drawing Interchange Format) är ett format som skapades av Autodesk för att kunna importera/exporter data mellan program. DXF används till de flesta program som finns i Workshoppen således kursens projekt. Anledningen till att vi använder DXF är att det är lätt att skriva eftersom det är vanliga bokstäver, till skillnad från andra format som kan vara binär kod. Man skulle kunna skriva en vanlig fil och döpa det till.dxf och importera i AutoCAD. Nu använder inte vi AutoCAD utan Rhino, men den klarar formatet galant. Vi har några enkla saker som vi vill ändra på: ˆ Layer (sorts gruppering) ˆ Color (vi kan inte rendera dock) ˆ Lines ˆ 3dfaces (polygoner) För mer information om själva formatet gå in på www Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 14 / 23

DXF Syntax Entity type Name Entity type Colour Primary point (x) Primary point (y) 0 SECTION 2 ENTITIES 0 3DFACE 62 2 10-0.5 20-0.5 13 0.5 23 0.5 33-0.5 0 ENDSEC 0 EOF Fourth corner (x) Fourth corner (y) Fourth corner (z) End of section End of file Se kapitlet Group codes in numerical order i manualen för betydelser. Under kapitlet 3D face står det om koder för koordinater. Att använda färger är inte helt lätt då de är index till en färgkarta. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 15 / 23

Kaos Cellulära Automater Till dagens övning introduceras ni till cellulära automater. En cellular automata (CA) är en matris som ofta består av binära värden (ettor och nollor). Men kan även bestå av flyttal. Ett välkänt exempel på en binär CA är Conways Game of Life som bygger på några enkla regler där själva automaten genererar en animation som påminner om levande celler (i biologisk mening). 1 Any live cell with fewer than two live neighbours dies, as if caused by under-population. 2 Any live cell with more than three live neighbours dies, as if by overcrowding. 3 Any live cell with two or three live neighbours lives on to the next generation. 4 Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 16 / 23

Kaos Reglerna till Game of Life Game of Life är ett fascinerande system, man kan ur enkla regler skapa kaotiska mönster. Illustrationen nedan visar ett steg i en generation. En generation är en frame i animationen som skapas. a b a[i][j] Scanna matrisen och uppdatera b med de nya värdena. Kopiera över a efter varje generation. Vi läser a och skriver till b, sedan måste man kopiera över till a igen inför nästa generation, se www. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 17 / 23

Kaos Game of Life Exempel på en variation av GoL a[i][j ] = mod(i 2 + ij 2, 20) för alla i, j... i = 0 15 16 17 Generationer av GoL med en speciell startdistribution som genererar uppradade kaniner. En granne i detta exempel är ett element med värdet >0.9. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 18 / 23

Kaos Avslutande ord om funktioner Skriver vi en funktion som inte returnerar någonting (finns ingen return i) använder vi nyckelordet void. void A_clear_row ( int i ) { for ( int j=0;j<size ; j++) A [ i ] [ j ]=0; } Exempel från övningen idag. I detta fallet modifierar vi A som är ett globalt 2 dimensionellt fält. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 19 / 23

Kaos L-System...med turtle graphics Used for educational purposes with premission of Denning Branch International. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 20 / 23

Kaos L-System Ett rekursivt system skapad av Biologen Aristid Lindenmayer (1968) som bygger på en parallell omskrivning av instruktioner. Idén var först att ge en formell modell för att beskriva strukturen hos alger i. L-System bygger på följande regler : Start - Begynnelsesträng. Regler - Mönster för omskrivning av variabler. Variabler - Ersättande tecken. Konstanter - De tecken som inte kan ersättas (i Regler). För följande system som för övrigt är en fraktal använder vi: ˆ Start: F++F++F ˆ Regel: F F-F++F-F ˆ Variabler: F ( rita ett steg framåt ) ˆ Konstanter: +,- ( rotera höger resp. vänster ) ˆ Vinkel: 60 i Kallas för bracketed L-Systems vilket vi inte kommer gå igenom. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 21 / 23

Kaos L-System Exempel Iteration band figur 0 F++F++F Start: F++F++F Regler: F F-F++F-F Konstanter: + - (60 ) 1 F F++F F++F F++F F++F F++F F 2 F F++F F F F++F F++F F++F F F F++F F++F F++ F F F F++F F++F F++F F F F++F F++F F++F F F F++F F++F F++F F F F++F F 6 F F++F F F F++F F++F F++F F F F++F... (6144 tecken) Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 22 / 23

Övningar Övningar ˆ Ni behöver inte logga in för att hämta ner från kurshemsidan www ˆ ˆ Öppna Instruktioner till Övning 4.pdf (under Övningar/4/) Öppna Referensblad.pdf (under Extra/) ˆ Om ni undrar något så kolla i referensbladet, där står allt ni behöver veta. ˆ Är jag upptagen så kolla på ledtrådarna, annars kan ni skriva upp er på tavlan så tar jag er i tur och ordning. Ni som är snabba får gärna hjälpa övriga. Matz JB (AT Arkitektur & Teknik, Chalmers) Grunderna i C++ 2011 23 / 23