Geometri Douglas Wikström KTH Stockholm popup-help@csc.kth.se
Volym av parallellepiped En parallellepiped i R n med ett hörn i origo kan beskrivas av vektorer v 1,...,v n R n. Dess orienterbara volym ges då av: v 1 v 2 det.. v n
Lite intuition Varje matris A = (v 1,...,v n ) kan med singulärvärdesdekomposition skrivas A = UDV där D är en diagonalmatris och U och V är unitära matriser, vilket bland annat medför att det(u) = det(v ) = 1 och det(d) = n i=1 λ i, där λ i är A s egenvärden. En diagonalmatris representerar ett n-dimensionellt rätblock, som förstås har volymen n i=1 λ i.
Tringlar och mer allmänt n-simplex En n-simplex i R n kan beskrivas av vektorer v 1,...,v n R n (hörnet av en parallellepiped). Dess orienterbara volym ges då av: 1 n! det Notera specialfallen i R 2 och R 3. v 1 v 2. v n.
Area av enkel polygon i R 2 En polygon ges av dess hörn p 0,...,p n 1, dvs den består av linjesegmenten p i p i+1 mod n. En enkel polygon skär inte sig själv. Dess area kan beräknas: som en vanlig integral (kan vara krångligt att koda), eller som summan av areorna av trianglarna som ges av punkterna 0, p i, p i+1 mod n för i = 1,...,n. Notera att detta generaliserar till enkla polytoper.
Polygon i Z Pick s Sats. Om I är antalet interna punkter, och R är antalet punkter på randen så är A = I + R/2 1.
Innanför eller utanför cirkel? det x 0 y 0 x 2 0 + y2 0 1 x 1 y 1 x 2 1 + y2 1 1 x 2 y 2 x 2 2 + y2 2 1 x 3 y 3 x 2 3 + y2 3 1 Om determinanten är positiv/negativ så är punkten (x 3,y 3 ) innanför/utanför cirkeln och är den noll ligger (x 3,y 3 ) på själva cirkeln.
Punkt relativt linje? Låt L vara en linje genom punkterna p 0 och p 1 och låt p 2 vara en tredje punkt. Vi vill veta om p 2 ligger till höger eller vänster om L sett från p 0 i riktning mot p 1. Betrakta triangeln som ges av vektorerna p 1 p 0 och p 2 p 0. Om den: 1. har positiv orienterbar area så ligger p 2 till vänster om L, 2. har negativ orienterbar area så ligger p 2 till höger om L, och 3. har arean noll så ligger p 2 på L. Detta generaliserar på ett naturligt sätt till högre dimensioner.
Skär linjesegmenten varandra? Givet två linjesegment ab och cd, skär de varandra? Är c och d på olika sidor om linjen genom a och b? Är a och b på olika sidor om linjen genom c och d?
Punkt relativt polygon? Vi vill ta reda på om en punkt p ligger innanför eller utanför en polygon p 0,...,p n 1.
Skärningsnummer Räkna antalet linjesegment p i p i+1 mod n i polygonen som skärs av ett linjesegmentet pq där q är en punkt utanför polygonen. Om antalet är udda så är p i polygonen. Om antalet är jämnt och polygonen är enkel så är p utanför. Om antalet är jämnt och polygonen inte är enkel så vet vi inte.
Virningstal Betrakta mängden vektorer p i p, där p 0,...,p n 1 är hörnen i polygonen (i linjesegmentordning). Summera vinklarna mellan vektorerna. Om summan är noll är punkten p utanför polygonen och annars är den innanför. Vi behöver bara hålla reda på hur många varv vi har gått, så vi behöver inte räkna ut själva vinklarna.
Två närmaste punkter? Problem. Punkter p 1,...,p n är givna i R 2. Hitta ett par av punkter som har minimalt avstånd från varandra. 1. Sortera punkterna med avseende på x-koordinat, och sortera {p 1,...,p n/2 } och {p n/2 +1,...,p n } med avseende på y-koordinat. 2. Hitta minima d and d + rekursivt för {p 1,...,p n/2 } och {p n/2 +1,...,p n }. 3. Hitta minimum under restriktionen att en punkt är i varje delmängd i linjär tid med hjälp av ett gleshetsargument. 4. Returnera minimum av de tre minima.
Konvexa höljet Definition. En mängd S är konvex om för varje par av punkter p 1 och p 2 och varje 0 λ 1, punkten λp 1 + (1 λ)p 2 ligger i S. Definition. Konvexa höljet till en mängd T är den minsta konvexa mängden S så att T S. Vi vill beräkna en representation av randen till konvexa höljet. Hur gör vi detta för en ändlig punktmängd i R 2?
Graham Scan Idé 1. Identifiera en extrempunkt p 0. 2. Sortera punkterna p 0,...,p n 1 med avseende på vinkel mellan p i p 0 och x-axeln. 3. Initiera en stack och gå igenom punkterna i vinkelordning och gör följande: Så länge punkten ger en högersväng: popa stacken. Pusha punkten på stacken.