MATEMATISKA VETENSKAPER TMV166 2017 Chalmes tekniska högskola Datolaboation 4 Eaminato: Ton Stillfjod TMV166 Linjä algeba fö M Datolaboation 4: Geometiska tansfomatione och plottning av figue Allmänt Vi diskutea geneellt R n elle till och med oändligtdimensionella vektoum, då egenskapena fö dessa ä desamma som fö R 3. Befinne vi oss i R 3 (vilket oftast ä fallet) så kan vi dock visualisea vektoe på ett intuitivt sätt: de ä iktade stäcko i ummet som utgå fån oigo. Fö att illustea detta så kan vi ita dem i Matlab. Stikt sett så pojicea vi då en vekto i R 3 på ett plan i R 2 (datoskämen) och ita denna. Vi kan också illustea olika linjäa tansfomatione genom att se hu de påveka givna vektoe. Mål ˆ Rita geometiska figue i Matlab ˆ Applicea linjäa tansfomatione på dessa figue Användbaa kommandon Kom ihåg att den Euklidiska nomen v av en vekto v beäknas med nom(v) i Matlab. Skaläpodukten av och kan beäknas med dot(,), men vanligtvis använde man '* ifall och båda ä kolonnvektoe. Ett tteligae användbat kommando ä acos, fö acus cosinus. Vinkeln mellan två vektoe Uppgift 1. Skiv en funktionsfil som beäkna vinkeln mellan två givna vektoe och. Om vinkeln betecknas så ä den matematiska fomeln Föslag på funktions-fomat: = cos. Uspunglig datolaboation föfattad av Cal-Henik Fant och Lennat Falk, uppdatead av Ton Stillfjod
function theta = angle (,) % Input : two vectos, % Output : the angle between and... end Pogammet skall ge vinkeln mellan vektoena mätt i adiane. Skiv gäna pogammet så att det inte spela någon oll om vektoena matas in som kolonnvektoe elle som advektoe. Testa funktionen på någa olika pa av vektoe. Det ä klokt att bl.a. testa med vektoe dä du vet svaet. Spegling Matematisk bakgund Låt planet π vaa givet som A+B +C = D. Dividea vi ekvationen med A 2 + B 2 + C 2 så få vi en n ekvation a + b + c = d, och en nomalvekto n = (a, b, c) av längd 1. (Kontollea detta med nom(n).) Tag en punkt med otsvekton och låt 0 vaa en godtcklig punkt i planet. Då ges den otogonala pojektionen av otsvekton p dä p = ( ( 0 ) n ) n = ( 0 n n)n = (d n)n. (Eftesom 0 n = d fö en punkt i planet π.) Detta ä pojektionsfomeln, vilket vi åtekomme till senae i kusen. Tills dess äcke det att veta att en otogonal pojektion ge oss den nämaste punkten i planet till. Denna ä entdigt bestämd. Fö spegelpunkten med otsvekto s gälle att s = + 2(p ) = + 2(d n)n. Hä ä p stäckan fån till p, så fakton 2 i ekvationen innebä att vi föst gå fån till planet och sen pecis lika långt till i samma iktning. Uppgift 2. Skiv ett pogam som givet planet A + B + C = D och en punkt i ummet beäkna spegelbilden s av i planet. Föslag på funktions-fomat: function s = eflection (, A, B, C, D) % Input : a point, % the paametes of the plane A + B + C = D % Output : the eflection s of in the plane... end Fö bästa anpassning till nästa uppgift, epesentea alla vektoe som kolonnvektoe. Testa funktionena på någa lämpligt valda plan och punkte, fö vilka man lätt kontollea att esultaten stämme.
Ritning av godtckliga figue Vi vill kunna ita godtckliga plana figue med Matlab, eempelvis en kuva ((t), (t)) på paametefom, elle en polgon. Detta kan göas genom att skapa en koodinatmatis fö de punkte vi vill ita. Denna matis kan skivas på något av följande sätt: [ P = = [ p 1 p 2 p n. Hä ä och advektoe av längd n bestående av - espektive -koodinatena fö punktena, medan p i ä en kolonnvekto med koodinatena [ fö punkt numme i. Om man vill ita en kuva (ti ) på paametefom så välje vi p i = fö tilläckligt täta t-väden. En polgon få vi (t i ) om vi låte p i vaa hönen uppäknade i en lämplig odning. (Glöm inte att uppepa den fösta punken i slutet.) Vi ita nu figuen genom att plotta -koodinatena mot -koodinatena med kommandot >> plot (P (1,:), P (2,:) ) Pöva genom att ita figuen nedan: (0, 1) (1, 1) (0, 0) (1, 0) Uppgift 3. Rita en tiangel i planet. Välj hön så att tiangeln inte skäs av linjen + 2 = 1 (bt gäna ut någon koodinat om någon vinkel ä näa 180 ). Använd funktionen eflection fån föegående uppgift fö att bestämma figuens spegelbild i linjen + 2 = 1. Obsevea att spegling i plan skall btas ut mot spegling i linje: välj C = 0 och mata in vekton med -koodinaten noll. Plotta linjen, figuen och dess spegelbild i samma figu. Kommandot ais equal efte plot ä nödvändigt fö att speglingen skall se koekt ut. Rotatione av objekt i 3D I nästa uppgift behöve vi otea ummets vektoe king en fitt vald ael. Om denna ael ä -aeln ä det lätt att hitta standadmatisen M fö denna vidning. Ifall otationsaeln ä en annan så kan man bta till en annan bas (f 1, f 2, f 3 ) dä f 3 ä en vekto i otationsaelns iktning. Om koodinatena fö en vekto u ges av (,, ) i standadbasen (e 1, e 2, e 3 ) och (ξ, η, ζ) i den na basen så ha vi = P ξ η ζ
dä P = [ f 1 f 2 f 3 ä basbtesmatisen. Antag nu att T ä en linjä tansfomation som i basen (f 1, f 2, f 3 ) ha matisen M, och att T (u) ha koodinatena (,, ) i standadbasen och (ξ, η, ζ ) i den na basen. Men då gälle att = P ξ η ζ = P M ξ η ζ = P MP 1 dvs. standadmatisen fö T ges av P MP 1. Nu använde vi denna obsevation fö att bestämma standadmatisen fö en otation king godtcklig ael i 3D: Låt = vaa otsvekton fö en punkt i ummet. Sambandet = M, dä cos sin 0 M = sin cos 0 0 0 1 ge då en vidning av med en vinkel king -aeln (fig.). Vi vill nu vida en punkt king en ael genom oigo med iktningsvekto v = a b c., En lämplig n (högeoientead) bas B = {f 1, f 2, f 3 } med f 3 i samma iktning som v få vi genom att ta f 1 = u/ u, f 2 = w/ w och f 3 = v/ v dä u = b a 0, w = ac bc (a 2 + b 2 ). Med P = [ f 1 f 2 f 3 (basbtesmatisen) så ges sambandet mellan na och gamla koodinate av = P ρ dä ρ = [ B ä koodinatena fö i basen B. I denna bas så ges matisen fö otationen av matisen M ovan. Vi få ρ = Mρ och = P MP 1. På gund av att vi valt en specifik bas, en så kallad ONbas, så ä kolonnena i P otonomeade (senae i kusen) och dämed ä P 1 = P T. Multiplikation med matisen R = P MP T ge således en vidning med vinkeln king vekton v. En samtidig vidning av flea otsvektoe 1, 2,..., n åstadkommes genom matismultiplikationen v R [ 1 2 n = [ 1 2 n.
Uppgift 4. Skiv en funktionsfil R=otation(v,t) dä v ä den vekto som ge otationsaeln, t ä den skalä som ge otationsvinkeln och dä R ä den beäknade 3 3 otationsmatisen. Eventuell finputsning: Om v ä paallell med -aeln, bli vekton u enligt poceduen ovan lika med nollvekton. Tillfoga en villkossats som gö att pogammet klaa även detta fall. Uppgift 5. Skiv en funktionsfil cube(v,dt) som åstadkomme en oteande kub i gafikfönstet till Matlab, dä otationsaeln ges av vekton v och kuben vids vinkeln dt i vaje litet otationssteg. Någon utvaiabel behövs inte, filen ska ju baa åstadkomma plottning. Tillveka en matis K vas kolonne ä koodinatvektoena fö kubens hön, skivna i en sådan odning att vi kan plotta kubens alla kante. Mata in dessa vektoe som k 1, k 2,..., k 8 och bilda sedan K genom att äkna upp vektoena i lämplig odning: K = [ k 1 k 2... (ita figu som stöd). Fö att inte missa någon kant måste vi ta med vaje hön (minst) två gånge. Vi ita nu figuen genom att plotta -koodinatena mot -koodinatena med kommandot >> plot (K (1,:),K (2,:) ) Genom att utelämna -koodinatena få vi kubens pojektion på -planet. Animationen bli snggast om man låte kubens centum ligga i oigo. Pogammet kan t.e. bgga på en loop dä man i vaje steg vide kuben eempelvis dt = 1/100 vav, ita (plotta kubmatisens fösta ad mot den anda, pecis som ovan) och ge kommandot dawnow elle pause(dt) (använd help i Matlab). Ange ais squae efte plotkommandot. Mea om plottning av 3D-objekt Det handla om att avbilda en pojektion av objektet på ett plan. Ett enkelt sätt att göa detta ä som ekommendeades i ovanstående uppgift att välja -planet som pojektionsplan. Man plotta då punktenas -koodinate mot -koodinatena (-koodinatena lämnas dähän). Eftesom man hä kan välja otationsael fitt, kan man ändå åstadkomma alla pespektiv på en oteande kub om man nöje sig med att pojicea på -planet. Annas finns i Matlab ett 3D-plot-kommando plot3. Kommandot i föegående uppgift bli då istället >> plot3 (K (1,:),K (2,:),K (:,3) ) Den pojektion som används hä, innebä att linje som ä paallella också se paallella ut i pojektionen. I vekligheten se man dock paallella linje konvegea mot en punkt långt bota (t.e. skenona på ett jänvägsspå). Betakta man kuben på lite håll, så påvekas paallelliteten ganska lite. Det se alltså någolunda ealistiskt ut, om man tänke sig att kuben inte befinne sig alltfö näa ögat. Däemot kan det vaa svåt att se vad som ä fam och bak på kuben, och en vanlig snvilla ä att den plötsligt bte otationsiktning. Detta kan avhjälpas genom att man mäke en av kubens sido, t e genom att ita ut diagonalena i den sidan. (Vill man åstadkomma nss nämnda pojektion med konvegeande linje, kan detta göas med så kallade homogena koodinate. Man abeta med 4 4-matise se La, avsnitt 2.7.