Lees dit aandachtig door voordat je aan de opdracht begint.

Save this PDF as:
 WORD  PNG  TXT  JPG

Maat: px
Weergave met pagina beginnen:

Download "Lees dit aandachtig door voordat je aan de opdracht begint."

Transcriptie

1 Aanwijzingen ooraf Lees dit aandachtig door oordat je aan de opdracht begint. Delierables Je dient, oorafgaand aan deze opdracht, de opdrachten oer poolcoördinaten te hebben gemaakt. De opdrachten kun je inden op Blackboard op de Ruimtewiskunde sectie. Bij deze opdracht zul je eel met MATLAB werken. Neem je laptop mee en zorg dat MATLAB geïnstalleerd en werkend is. Ook handig: neem de syllabus Introduction to MATLAB an Elżbieta Pękalska mee. Leer een document in met daarin de uitgewerkte antwoorden an alle genummerde opdrachten. Zet op de eerste pagina an het erslag de namen en studentnummers an alle studenten an je groep. Het document moet ia Blackboard worden aangeleerd. Verslagen moeten in PDF formaat worden aangeleerd. Andere formaten wordt niet geaccepteerd. Ongenummerde opdrachten hoef je niet in te leeren. Er zijn 7 genummerde opdrachten. Schrijf alle MATLAB code in één script (een bestand met etensie.m). Beoordeling Voor iedere opdracht krijg je twee punten. De case wordt met een oldoende beoordeeld als er tenminste 9 punten zijn behaald. Leerdoelen 1. Het kunnen beschrijen an lijnen en lakken in de ruimte. 2. Het kunnen berekenen an snijpunten an lijnen en lakken. 3. Het kunnen gebruiken an MATLAB oor isualisatie an lijnen en punten. printed: 10:56,

2 Inleiding Al ele eeuwen hebben tekenaars en schilders nagedacht oer methoden om de drie-dimensionale wereld waarin wij leen oer te zetten naar het platte lak. In de tekening hiernaast zie je hoe Albrecht Dürer met een touwtje probeert een punt op de luit te ertalen naar een punt op een el papier. In dit practicum gaan we hetzelfde doen, maar dan met een beeldscherm in plaats an papier, en we gebruiken wiskunde in plaats an touw. Het idee is om objecten in de ruimte te definiëren als een erzameling punten en lijnen. De punten beelden Figuur 1: perspectiisch tekenen in de 16 e eeuw, Albrecht Dürer (bron: Wikipedia). we af op een plat lak, en we erbinden deze daarna met lijnen. We gebruiken MATLAB oor de berekeningen en grafische operaties. Hoewel MATLAB standaard ingebouwde functies heeft oor het maken an perspectiische afbeeldingen, gaan we het helemaal zelf programmeren. Daarna gaan we een driedimensioneel beeld maken met zogenaamde anaglyphen. Pan en tilt Voordat we aan het rekenen slaan moeten we eerst een goed beeld krijgen an de de situatie. We denken ons in dat we lak S hebben dat ergens in de ruimte hangt. Dit lak is ons el papier of beeldscherm, zie figuur 2. Op S is een assenkruis getekend dat we het u-assenstelsel noemen. Het snijpunt an de u-assen is het punt P, en we schrijen p = OP #». Deze ector beschrijft dus de positie an het scherm S ten opzichte an het globale assenstelsel yz. De basisectoren an het u-stelsel heten u en. Loodrecht op het lak staat een normaalector n. We nemen het olgende aan: 1. De ectoren u, en n zijn eenheidsctoren. 2. De ector u is eenwijdig met het y-lak; de hoek die u maakt met de -as noemen we θ. Als je θ erandert, draait S om de z-as. printed: 10:56,

3 3. De ector maakt een hoek met de z-as. Deze hoek noemen we ϕ. Als je ϕ erandert, draait S om de u-as. S z n P u u O y Figuur 2: projectielak S met lokale coördinaat-assen u, en n Door deze aannames is het mogelijk de stand an S te beschrijen met slechts twee ariabelen: de hoek θ en de hoek ϕ. In de cinematografie heet θ de panangle (pan komt an panorama ), terwijl ϕ de tilt-angle wordt genoemd. Opdracht 1 In deze opdracht gan we de coördinaten an u, en n beschrijen als functies an θ en ϕ. We doen dit met behulp an poolcoördinaten, een onderwerp dat je hebt bestudeerd als oorbereiding op deze case. Als je dit niet gedaan hebt, doe dit dan alsnog, en ga dan erder met deze opdracht. Aanwijzingen en hints: Bedenk dat oor de bepaling an u, en n de waarde an p niet an belang is. Je mag dus aannemen dat p = 0. printed: 10:56,

4 ϕ S n ϕ θ ϕ n u z u y Figuur 3: pan (θ) en tilt (ϕ) in R 3 Teken een y-lak en schets daarin u en θ. Bepaal hiermee de coördinaten an u. De ector is gedefinieerd door = ( sin ϕ sin θ, sin ϕ cos θ, cos ϕ). Ga na dat: (i) = 1; (ii) u; (iii) ϕ de hoek is tussen en de z-as. Bereken n met behulp an het uitwendig product. Schrijf een MATLAB functie [u,, n] = screen(pan,tilt) die de ectoren u, en n berekent bij gegeen pan- en tilthoeken θ en ϕ. Opmerking: als je te werk gaat zoals beschreen in de boenstaande opdracht, dan draait de kijkrichting bij een positiee waarde an ϕ naar beneden. Als je dat niet wilt kun je ϕ erangen door ϕ. printed: 10:56,

5 y z kijkrichting f u θ pan n f n y-lak ϕ tilt kijkrichting boenaanzicht zijaanzicht Figuur 4: pan (θ) en tilt (ϕ) in R 2 Perspectiische projectie op één scherm Bij een perspectiische projectie gaan we er an uit dat het licht dat anuit een punt wordt uitgezonden, wordt opgeangen in één enkel punt, dat we het iew point zullen noemen. Het iew point is de plaats waar zich normaal gesproken een oog of een camera beindt. Dit punt ligt op de n-as, op afstand f an het lak S, met andere woorden: f = p + fn. Let op dat de kijkrichting n is. Door de waarde an f te ariëren kun je in- of uitzoomen. Opdracht 2 Stel een lichtstraal ertrekt anaf een punt = (, y, z) en komt aan in f. De lijn l door en f kan als olgt worden geparametriseerd: l: p + fn + t( p fn), t R. f Definieer t 0 = f ( p) n en 0 = p + fn + t 0 ( p fn). (a) Toon aan dat 0 het snijpunt is an l met S (bedenk dat S wordt gegeen door de normaalergelijking ( p) n = 0). (b) Omdat 0 in het lak S ligt, geldt: 0 = p + αu + β. Toon hiermee aan dat α = ( 0 p) u en β = ( 0 p). (c) Bepaal α en β als functies an, y, z, f, p, u, en n. Het zijn de coëfficiënten α en β waar we naar op zoek zijn. Als je met MATLAB printed: 10:56,

6 in een 2D-plot op plaats (α, β) een punt of klein cirkeltje plot, dan heb je de perspectiische projectie an getekend (zie fig. 5). β f n P u α 0 u S Figuur 5: projectie an op S Opdracht 3 (a) Schrijf een MATLAB functie pproj([, y, z], pos, theta, phi, f) die de perspectiische projectie berekent an [, y, z] op het scherm S dat gedefinieerd is als olgt: 1. Het centrum an het scherm (het punt P ) wordt bepaald door pos. 2. De pan- en tilthoeken zijn theta en phi. 3. De afstand an het iew point tot S is f. (b) Breid de functie pproj zodanig uit dat deze een array an punten projecteert. Dus als points = [ 1 y 1 z 1 ;... ; n y n z n ], dan is het resultaat an pproj[points, pos, f, theta, phi] het array [α 1 β 1 ;... ; α n β n ] waarbij [α k β k ] de projectie is an [ k y k z k ] op het scherm bepaald door de parameters pos, f, theta, phi. Tip: omdat je an teoren weet hoe groot het array [α 1 β 1 ;... ; α n β n ] gaat worden is het aan te raden om oor dit array ruimte te pre-alloceren. Hoe je dit doet lees je in paragraaf 11.2 an [PEK]. printed: 10:56,

7 Wireframe plots De figuren die we in dit practicum gaan tekenen zijn zogenaamde wireframes. Dit zijn figuren die bestaan uit lijnstukken. Om deze met MATLAB te kunnen plotten definiëren we een wireframe met twee arrays. 1. Het erte array: een array met de coördinaten an de hoekpunten. 2. Het edge array: een array met paren getallen die aangeen tussen welk tweetal hoekpunten een lijn moet worden getekend. De getallen die we hierbij gebruiken zijn de indices an de punten an het erte array. Voorbeeld Stel we willen het ierkant met hoekpunten (0, 0), (1, 0), (1, 1) en (0, 1) tekenen. Dan leggen we dit ierkant ast met de olgende twee arrays: 1. Het erte array: = [0 0; 1 0; 1 1; 0 1]. 2. Het edge array: e = [1 2; 2 3; 3 4; 4 1]. Merk op dat een 4 2-matri is: de eerste kolom an e beat de -coördinaten en de tweede kolom de y-coördinaten. De getallen in de matri e zijn geen coördinaten maar indices. Bijooorbeeld: de tweede rij an e is [2 3], dit geeft aan dat er een lijn moet worden getekend an (2) naar (3), dus an (1, 0) naar (1, 1). y (4) (3) Opdracht 4 (1) (2) (a) Schrijf een MATLAB functie wireframe(,e) die de lijnen tekent an het wire frame gedefinieerd door erte array en edge array e. Aanwijzing: gebruik de MATLAB functie line. printed: 10:56,

8 (b) Gebruik wireframe om een huisje te tekenen: 2 y Zorg er oor dat de assen gelijk schaal hebben. Dit doe je met ais equal. De functie ais kun je ook gebruiken om het plotenster mee ast te leggen. Gebruik ais([min Ma ymin yma]). Het punt linksonder in het enster is (Min, ymin), en het punt rechtsboen is dan (Ma, yma). Gebruik grid off als je de rasterlijnen wilt erbergen. Vergeet niet de plot leeg te maken met clf. (c) Voor het tekenen an anaglyphen moeten we de lijnkleur kunnen specificeren. Breid daarom wireframe uit met een derde parameter waarmee je de kleur an de lijnen kunt bepalen. Deze parameter moet optioneel zijn: als hij niet aanwezig is wordt de default waarde 'b' (zwart) gekozen. Met andere woorden: wireframe(,e) wireframe(,e,col) tekent alle lijnen in de kleur zwart, tekent alle lijnen in de kleur col. y y wireframe(e, ) wireframe(e,, 'r') printed: 10:56,

9 Aanwijzing: gebruik nargin om de optionele parameter mee te programmeren. Zie [PEK], paragraaf 8.2.1, blz. 53. Wireframes kunnen ook drie-dimensionaal zijn. Dit bijoorbeeld is het erte array an een kubus: [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 0 1; 1 0 1; 1 1 1; 0 1 1] Opdracht Deze opdracht hoef je niet in te leeren Wat is het edge array an de kubus? Door de hoekpunten an de kubus perspectiisch te projecteren maak je an cube, het erte array an de kubus, een 2 8 matri, die je erolgens met wireframe kunt plotten. Opdracht 5 (a) Combineer wireframe met de functie pproj an opdracht 3 tot de functie wireframe3d(, e, pos, theta, phi, f, col) waarmee je een driedimensionaal wireframe kunt plotten. Gebruik deze functie om de kubus met erte array cube te plotten in kleur col. (b) Op Blackboard ind je bestanden met daarin de erte- en edge-arrays an de ijf platonische lichamen. Dit zijn regelmatige eelhoeken, waaran de zijlakken bestaan uit gelijke regelmatige eelhoeken. tetraeder kubus octaeder dodecaeder icosaeder Om de data uit deze bestanden te kunnen laden kun je het best gebruik maken an importdata. Stel je wilt de coördinaten an het octaeder laden en toekennen aan de ariabele oct_rts, dan zeg je oct_rts = importdata('octahedron_ertices.tt', ' ') printed: 10:56,

10 Het eerste argument is de bestandsnaam, het tweede argument is het gebruikte scheidingsteken. In ons geal is dat een spatie. Anaglyphische projectie Figuur 6: anaglyphische projectie an een reeks kubussen Omdat we twee ogen hebben die op enige afstand an elkaar staan, zien onze ogen ruimtelijke objecten op erschillende wijze. Dit erschijnsel heet paralla. Ons brein interpreteert de erschillende beelden als diepte. We kunnen de dieptewerking simuleren met zogenaamde anaglyphen. Dit zijn tweekleurige afbeeldingen, aak in de combinatie rood/blauw of rood/cyaan. In figuur 6 zie je een oorbeeld an een rood/cyaan-anaglyph. Je bekijkt anaglyphen met een gekleurde bril. Het rechteroog met het rode filter ziet alleen het blauwe gedeelte (waarom?), en het linkeroog ziet alles wat rood is. Hierdoor zien het linker- en het rechteroog erschillende beelden. Op deze wijze wijze ontstaat een kunstmatige paralla en kunnen we diepte zien. printed: 10:56,

11 Anaglyphen maak je door een object te projecteren op twee erschillende lakken, één oor het linker oog en één oor het rechter oog. Je kunt paralla eenoudig bewerkstelligen door het scherm te erplaatsen oer een zekere afstand in de richting an u. Stel de afstand tussen de centra an de schermen is d, dan gebruik je oor de positie an de twee schermen de ectoren p R = p + 1du 2 en p L = p 1 du. Het is handig om d mee te geen als parameter aan pproj, 2 omdat u alleen binnen deze functie bekend is. Opdracht 6 (a) Breid pproj uit met een optionele zesde parameter ushift waarmee de positie an het scherm in de u-richting kan worden erschoen. De functieaanroep pproj(, pos, theta, phi, f, ushift) projecteert de punten op een lak S met centrum pos + ushift u. Voor het toeoegen an een optionele parameter erwijzen we weer naar paragraaf uit [PEK]. (b) Combineer de nieuwe ersie an pproj met de functie wireframe3d an opgae 5 om een anaglyphische projectie an cube te maken. De kleuren die in de brillen zijn gebruikt zijn rood en cyaan. In MATLAB gebruik je hieroor 'r' respektieelijk 'c'. Combineer plots met behulp an hold on en hold off. Zie ook paragraaf 4.2 an [PEK]. Je kunt het paralla-effect nog erbeteren door de kijkhoek aan te passen. In figuur 6 zie je duidelijk dat de blokjes in de diepte naar elkaar toe conergeren. De 3D eraring an de anaglyph wordt beter naarmate deze conergentie sterker wordt. Wat in feite moet doen is een beetje scheel te kijken. Dit bewerkstellig je door de pan-hoek an beide schermen aan te passen. Opdracht 7 Verbeter de anaglyphische projectie door de hoek θ (de pan ) oor beide ogen te corrigeren. Draai de kijkhoek oor het linker oog enigzins naar rechts, en draai die oor het rechter oog naar links. De precieze waarde an de correctie moet je proefonderindelijk bepalen, en hangt af an onder andere de afstand an het object to het scherm S en de zoomfactor f. printed: 10:56,

12 Verdere erkenning In deze paragraaf beschrijen we enkele uitbreidingen waar je ook aandacht en tijd aan zou kunnen besteden. Dit is facultatief: doe dit alleen als je tijd oer hebt en als je het leuk indt. Je hoeft hieran niets in te leeren. Projecteer meerdere figuren in één enster. Om te oorkomen dat je de ectoren u, en n steeds opnieuw moet uitrekenen kun je er oor kiezen twee (of meer) wireframes tew combineren tot één nieuw wireframe. Je kunt een functie schrijen mergewf schrijen die twee wireframes 1,e1 en 2,e2 combineert, met aanroep [, e] = mergewf(1, e1, 2, e2) Kun je figuren op een eenoudige manier erschuien en schalen? Je kunt ook proberen de punten an een wireframe met een matritransformatie te erplaatsen. Voor transformaties an punten in R 3 is heb een 3 3-matri nodig. Een aardige uitbreiding zou zijn om je figuur te kunnen roteren. In R 3 is de rotatiematri een 3 3-matri, waarin een hoop sinussen en cosinussen zitten. Alleen als de rotatie-as eenwijdig is aan, y of z-as is de rotatiematri relatief eenoudig. Zie [SYL], hoofdstuk 4, blz Door met homogene coördinaten te werken kun je translaties met een matritransformatie beschrijen. Zie [SYL], hoofdstuk 4, blz De camerapositie, de pan- en tilthoek en de zoomfactor worden als aste parameterwaarden opgegeen. Als je de camera wilt erschuien of draaien moet je steeds het hele script opnieuw uitoeren. Het zou mooi zijn als een ariabele realtime met een (schuif)knop zou kunnen aanpassen. Dit kan met de MATLAB GUIDE (Graphical User Interface Deelopment Enironment). Je kunt zelfs een stand-alone app maken (met de MATLAB App Designer). Beide opties kun je inden je in het menu-item New App in de HOME tab. Ealuatie en discussie De projectietechniek die we in deze case gebruiken, is rechttoe-rechtaan. Zo is er geen aandacht besteed aan de ertekening die je krijgt bij een grote kijkhoek. printed: 10:56,

13 Ruimtewiskunde Perspectiische projectie UNIVERSITEIT TWENTE. Verder zal het je opgeallen zijn dat er reemde dingen gebeuren als punten an je object achter het scherm terechtkomen. Dit soort anomaliën kun je oorkomen door gebruik te maken an clipping, een techniek waarbij je slechts het zichtbare deel an een lijn afbeeldt. Een ander probleem is dat de projecties oer elkaar heen worden getekend. De oerlappende gedeeltes worden afgeschermd door de tweede plot, en hierdoor onstaan er gaatjes in het beeld. Dit kan je oorkomen door alle oerlappende delen zwart te maken. Tenslotte: mogelijk ben je tegen de diision by 0 foutmelding aangelopen (wanneer gebeurt dit?) Een mogelijke oplossing is: zorg er oor dat je niet hoeft te delen. Dit doe je door gebruik te maken an homogene coördinaten. In college 7 wordt hier een summiere inleiding op gegeen. Homogene coördinaten kom je ook tegen als je je erder gaat erdiepen in geaanceerde rendering technieken zoals OpenGL. Het gebruik an 3D ision in de zorg komt steeds meer in de belangstelling, mede door de ontwikkeling an irtual reality en augmented reality technieken. Het grote oordeel an irtual reality boen anaglyphen is dat je de beelden in kleur kunt bekijken. Bij irtual reality eraar je boendien een geoel an onderdompeling ( immersion ) omdat het beeld meebeweegt met de beweging an je hoofd. Het principe is echter hetzelfde als die an het maken an anaglyphen, namelijk: maak oor elk oog een aparte projectie. Figuur 7: Da Vinci Surgical System met Firefly Fluorescence Imaging (bron: printed: 10:56,

14 Referenties [PEK] Elżbieta Pękalska Introduction to MATLAB, Syllabus, TUD ( ). [SYL] M. Boldy, Ruimtewiskunde, Syllabus, Uniersiteit Twente (2017). [THO] G.B. Thomas, M.D. Weir, J.R. Hass Thomas Calculus, Early transcendentals, Pearson, 12th international edition. Webpagina: boldymc/rw/16-17/case/ printed: 10:56,