ramar, matriser, kvaternioner perspektiv...x y z rotation i 3d man kan visa att vilken orientering...

Post on 04-Feb-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

3D: transformationer: ramar, matriser, kvaternioner

perspektiv: ortografisk, perspektiv

kurvor, ytor: parametriska, kubiska -

interpolerande, Bézier, spline Inlämningsuppgift 3

Yngve Sundblad y@kth.se DH2640 Grafik och Interaktionsprogrammering VT 2009

Kursmaterial •  3D-transformationer:

Kursboken (Angel) kap.4 •  Kurvor och ytor:

Kursboken (Angel) kap.12 (5.ed), kap.11 (4.ed) •  Projektioner:

Kursboken (Angel), kap.5 Ingrid Carlbom & Joseph Paciorek: Planar Geometric Projections and Viewing Transformations, Computing Surveys 10(4), Dec 1978, pp.465-492 (hela -502) (i kursbunten)

Matematiska byggstenar

•  Skalär (storhet) u •  Punkt (position) P •  Vektor (längd och riktning) v •  Transformationsmatris (4x4) M •  Kvaternion (3D-rotation) q

Skalär- och kryssprodukt

u

v

|v|

u ⋅ v θ u ⋅ v = (uxvx+ uyvy,+uzvz) = |u||v| cos θ Skalärprodukten är 0 omm faktorerna är ortogonala (vinkelräta)

u × v = (uyvz – uzvy, uzvx – uxvz, uxvy – uyvx) Kryssprodukten (en vektor) är ortogonal mot bägge faktorerna

u

v

u × v

Två av de vanligaste vektoroperationerna i datorgrafik

Basvektorer

Givet 3 st 3-dimensionella basvektorer v1, v2, v3 som alla är vinkelräta mot varandra kan vi skriva vektorn w som

v1

v2

v3

w α1v1

α3v3

α2v2

α1v1 + α2v2 w = + α3v3 = aT v1 v2 v3

där

aT = α1 α2 α3

Ramar (frames) Vi definierar en ram som (v1, v2, v3, P0 )

där P0 kallas ramens origo. För punkter i denna ram gäller:

v1

v2

v3

P η1v1

η3v3

η2v2

P0

+ η1v1 P = P0 + η2v2 + η3v3 = pT

där

pT = η1 η2 η3 1

v1 v2 v3 P0

(4D homogena koordinater, jfr 3D homogena för punkter i planet)

Ramar (frames) En riktningsvektor w i denna ram skrivs

v1 v2 v3 P0

w = aT

där

aT = α1 α2 α3 0

Riktningsvektorer definieras alltså oberoende av origo.

Byte av ram Givet två ramar (v1, v2, v3, P0) och

(u1, u2, u3, Q0), kan vi skriva

Q0 = γ41v1 + γ42v2 + γ43v3 + P0

v1

v2

v3

u1 γ11v1

γ13v3

γ12v2

γ11v1 u1 = + γ12v2 + γ13v3 u2 = γ21v1 + γ22v2 + γ23v3

u3 = γ31v1 + γ32v2 + γ33v3

u1 u2 u3 Q0

=

γ11 γ12 γ13 0 γ21 γ22 γ23 0 γ31 γ32 γ33 0 γ41 γ42 γ43 1

v1 v2 v3 P0

M

Matrisform:

Punkter och rambyte Ta nu en punkt P och definiera den i två olika ramar:

P =

u1 u2 u3 Q0

β1 β2 β3 1 = aT

v1 v2 v3 P0

= bTM

v1 v2 v3 P0

(föregående bild)

= α1 α2 α3 1

v1 v2 v3 P0

(enl. ovan)

P = α1v1 + α2v2 + α3v3 + P0

P = β1u1 + β2u2 + β3u3 + Q0

i den första ramen

i den andra

Hur är α- och β-värdena relaterade?

Punkter och rambyte

bTM = aT

= aT bTM

v1 v2 v3 P0

v1 v2 v3 P0

och omvänt:

b = (MT)-1a

a = MTb ⇔

D.v.s. P's koordinater i ram 2 fås om man multiplicerar koordinaterna för ram 1 med (MT)-1.

Exempel Antag att vi har två ramar

(v1, v2, v3, P0) och (u1, u2, u3, Q0) och att ramarna är relaterade till varandra enligt följande:

u1 = (3v1 + 4v2 )/5 u2 = (4v1 - 3v2 )/5 u3 = v3 Q0 = P0 + 0.5v3

M =

0.6 0.8 0 0 0.8 -0.6 0 0 0 0 1 0 0 0 0.5 1

(MT)-1 = 0.6 0.8 0 0 0.8 -0.6 0 0 0 0 1 -0.5 0 0 0 1

P0

v3

v1

v2

Q0

u3

u1

u2

MT = 0.6 0.8 0 0 0.8 -0.6 0 0 0 0 1 0.5 0 0 0 1

Exemplet Tag nu punkten a = (1 1 0 1)T i den första ramen (”världen”). Vilken är dess motsvarighet i den andra ramen (lokal)?

b = 1.4 0.2 -0.5 1 T

b = (MT)-1a

ger oss

= a

0.6 0.8 0 0 0.8 -0.6 0 0 0 0 1 -0.5 0 0 0 1 P0

v3

v1

v2

Q0

u3

u1

u2

• 1.4

0.2 1

1

0 rel P0, -0.5 rel Q0

Åt andra hållet: p = (1.4 0.2 -0.5 1)T i ram 2. I ram 1 blir den pvärlden = MTp = (1 1 0 1 )T

Fixram och transformationsram Ofta jobbar man med en "fixram" (t.ex. kameran/utsiktspunkten)

och en "transformationsram". Fixramen är fast och transformationsramen tillåts variera.

Exempel:

1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1

α1 α2 α3 1

=

α1 α2 α3 - d 1

Punkt i transf.- ramen

Motsv. punkt i

fixramen

Fixram

Transforma- tionsram

Våra koordinater

MT

d

3D-transformationsmatriser(jfr 2D)

=

=

=

=

=

11000000000000

11'''

11000100010001

111'''

zyx

ss

s

zyx

zyx

zyx

ttt

zyx

zyx

zyx

z

y

x

z

y

x

T

S

TMTranslation

Skalning

3D-rotationsmatriser (tre, en i 2D)

x 'y 'z'1

=Rz (θ)

xyz1

=

cosθ −sinθ 0 0sinθ cosθ 0 00 0 1 00 0 0 1

xyz1

x 'y 'z'1

=Rx (θ)

xyz1

=

1 0 0 00 cosθ −sinθ 00 sinθ cosθ 00 0 0 1

xyz1

x 'y 'z'1

=Ry (θ)

xyz1

=

cosθ 0 sinθ 00 1 0 0

−sinθ 0 cosθ 00 0 0 1

xyz1

Rotation kring z-axeln

Rotation kring x-axeln

Rotation kring y-axeln

Multipla transformationer (som 2D) Vi kan sätta samman transformationer genom att

multiplicera matriserna:

1 0 0 0 0 s 0 0 0 0 1 -d 0 0 0 1

α1 α2 α3 1

=

α1 sα2 α3 - d 1

TS

1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1

1 0 0 0 0 s 0 0 0 0 1 0 0 0 0 1

1 0 0 0 0 s 0 0 0 0 1 -d 0 0 0 1

=

T S TS

Multipla transformationer

1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1

1 0 0 0 0 1 0 0 0 0 s 0 0 0 0 1

1 0 0 0 0 1 0 0 0 0 s -d 0 0 0 1

=

T S TS

Observera att ordningen på multiplikationen kan spela roll!

1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1

1 0 0 0 0 1 0 0 0 0 s 0 0 0 0 1

1 0 0 0 0 1 0 0 0 0 s -sd 0 0 0 1

=

T S ST

Att specificera orientering (rotationer)

•  Vi börjar med att pröva yaw-pitch-roll (gir-stig-roll).

•  Antag att flygplanet är modellerat så det initialt "pekar" längs z-axeln.

•  Vi roterar först kring z-axeln (roll), sedan kring y-axeln (yaw), sist kring x-axeln (pitch).

•  Kallas för att arbeta med Euler angles eller Eulermatriser.

x y

z

Rotation i 3D

Man kan visa att vilken orientering (3D-rotation) som helst kan beskrivas som

en (1 st) rotation kring en vektor.

Rotationsmatriserna (kring x-, y- och z-axlarna) kan sättas ihop till en transformation utgående från rotationsvektorn

och rotationsvinkeln

v

Allmän 3D-rotation - Angel 4.9.4 Om rotationsenhetsvektorn är a = (ax, ay, az) och rotationsvinkeln runt denna vektor är θ roterar man först kring x-axeln till y-planet (x=0) med vinkeln θx= arctan(ay/az); d=√ay2+az2, cos(θx)=az/d, sin(θx)=ay/d, sedan kring y-axeln till z-planet med vinkeln θy= -arcsin(ax); cos(θy)=d, sin(θy)=-ax, sedan kring z-axeln med vinkeln θz= θ sedan tillbaka kring y-axeln med vinkeln -θy sedan tillbaka kring x-axeln med vinkeln -θx Alltså blir totala transformationsmatrisen: Rx(-θx) Ry(-θy) Rz(θ) Ry(θy) Rx(θx)

Kvaternioner, Angel 4.12 En matematisk struktur som kan beskriva 3D-rotation kring en godtycklig vektor är kvaternioner (quaternions), uppfunna 1843 av irländske matematikern W.R. Hamilton.

Detta motsvarar komplexa talens (Euler mfl, 1700-talet), i2=-1, användning för att beskriva 2D-rotationer i planet: z = x + iy = r (cos µ + isin µ) Rotation vinkeln θ genom multiplikation med p = cos θ + isin θ p*z = r (cos(µ + θ) + i sin(µ + θ))

Kvaternioner (quaternions)

q = (q0, q1, q2, q3) = q0 + q1i + q2j + q3k

där (jfr komplexa tal) i2 = j2 = k2 = -1 ij=k, jk=i, ki=j

ji=-k, kj=-i, ik=-j

En kvaternion q definieras så här:

= (q0, q)

Kvaternioner - algebra Lite kvaternionalgebra: tag två kvaternioner a och b:

a = (q0, q1, q2, q3) = (q0, q) b = (p0, p1, p2, p3) = (p0, p)

Norm och invers:

|a|2 = q02 + q ⋅ q = q0

2 +q12 +q2

2 +q32

a-1 = (1 / |a|2)(q0, -q)

Addition och multiplikation:

a + b = (p0 + q0, p + q) ab = (p0q0 – p ⋅ q, q0p + p0q + q × p)

Kvaternioner - för 3D-rotation

Tag en punkt P i 3D. Skapa kvaternionen

p = (0, P) = xi + yj + zk

Välj rotationsaxeln v normerad (enhetsvektor) Låt rotationsvinkeln vara θ.

v

θ

Skapa nu kvaternionen r enligt r = (cos(θ/2), sin(θ/2)v)

|r|2 = 1 r-1 = (cos(θ/2), -sin(θ/2)v)

P

Genom lite råräknande visar man att p' = rpr-1

ger samma resultat som sammansatta rotationsmatriserna för att rotera punkten P θ radianer kring vektorn v.

Om a och b är kvaternioner som representerar rotation enl. ovan gäller också (analogt med komplexa talen för 2D-

rotationer) att q = ab

är resultatet av att kombinera rotationerna(först a, sedan b).

Kvaternioner - för 3D-rotation

OBS! Angel (både fjärde och femte upplagan) har ett fel i formeln för p' = r p r-1, ska vara sin2 i sista termenp' =cos2(θ/2)p + sin2(θ/2)(p•v)v + 2 sin(θ/2) cos(θ/2)(v x p) - sin2(θ/2) (v x p) x v

Rotationsexempel, matriser Rotation 120 grader runt vektorn (1 1 1)/√3 d = √(2/3) cos θx = az / d = 1/√2, sin θx = 1/ √2 cos θy = d = √(2/3), sin θy = -az = - 1/√3 θz = θ = π/3 Rx = ((1 0 0 0)(0 1/√2 -1/√2 0)(0 1/√2 1/√2 0)(0 0 0 1)) Ry = ((√(2/3) 0 -1/√3 0)(0 1 0 0)(1/√3 0 √(2/3) 0)(0 0 0 1)) Rz = ((-1/2 -√3/2 0 0)(√3/2 -1/2 0 0)(0 0 1 0)(0 0 0 1)) M = Rx(-) Ry(-) Rz() Ry(+) Rx(+) = ((0 1 0 0 )(0 0 1 0)(1 0 0 0)(0 0 0 1)) M (x y z 1) = (y z x 1)

Rotationsexemplet, kvaternioner

Kvaternioner r = cos(θ /2) + (i sin(θ /2) + j sin(θ /2) + k sin(θ /2))/√3 =

1/2 (1 + i + j + k) p = i x + j y + k z r-1= 1/2 (1 - i - j - k) p r-1 = 1/2 (x + y + z) + 1/2 i (x - y + z) + 1/2 j (x + y - z) +

1/2 k (-x + y + z) r p r-1= 0 + i y + j z + k x = (y, z, x) Stämmer! Övning: Använd formeln för att räkna ut samma sak.

Kvaternioner

•  Det går alltså att konvertera en kvaternion till en rotationsmatris (och tvärtom)

•  Det kan löna sig att lagra orienteringar som kvaternioner: 4 flyttal istället för 3x3 = 9 (för en rotationsmatris)

•  Kvaternioner gör det enkelt att interpolera mellan orienteringar (för animering)!

Projektioner - historia

Giotto (1276-1336) Rafael (1483-1520)

Projektioner - historia

Projektioner - historia

Brook Taylor, New Principles of Linear Perspective, 1719.

Projektioner Planar Geometric Projections

Parallell Perspective

1-pt 2-pt 3-pt Orthographic Oblique

Cavalier Cabinet Multiview Axonometric

Isometric Dimetric Trimetric

Alla projektionerna finns beskrivna med illustrativa figurer i Carlbom-Pacioreks artikel och i Angel 5.1.

Perspektivprojektion Projektor på ändligt avstånd. Storlek minskar med avstånd från projektionsytan. Avstånd och vinklar bevaras inte i projektionen. Parallella linjer konvergerar i ”fjärrpunkt” (vanishing point)

Här enpunkts (ett projektionsplan), finns också två- och tre-, se Carlbom-Paciorek

Perspektivprojektion, Angel 5.4

x

y

z

d

y

d z

P Pp

Antag att vi projicerar punkten P på ett bildplan som ligger d enheter från origo och är parallellt med x-y-planet:

Bildplan

Perspektivprojektion

y

d z

P Pp

P = x y z 1 T

z

yp d =

y z

yp = yd z =

y (z / d)

Likformiga trianglar:

Pp = x/(z/d) y/(z/d) d 1 T

Analogt för xp. Så den projicerade punkten blir:

Pp = xp yp d 1 T

y yp

Perspektivprojektion

Vi vill kunna skriva perspektivprojektionen som en matris M. För att kunna göra det måste vi införa en ”normeringsoperation”

P = x y z w T

med w skilt från 1 ser vi till att alltid dividera med w innan vi fortsätter, d.v.s.

P = x/w y/w z/w 1 T

Om resultatet av en transformation blir en punkt

Perspektiv-projektionsmatris

1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/d 0

x y z 1

= x y z z/d

Eftersom z/d ≠ 1 dividerar vi alla komponenterna

med z/d innan vi använder punkten så att

vi får

x/(z/d) y/(z/d) d 1

Detta kallas perspektivdivision

i OpenGL.

MPp =

z

x

z

x

Ortografisk projektion Projektorerna är vinkelräta mot projektionsytan (på ”oändligt avstånd”).

I enklaste formen är det en eller flera vyer (multiview) med projektionsplan parallella till objektets huvudytor. Avstånd och vinklar bevaras i projektionerna. Typiskt exempel: maskinritningar

Axonometrisk ortografisk: Fortfarande vinkelräta projektorer men objektet vridet så att man ser flera ytor. projektionsplan symmetriskt till alla tre huvudytorna:isometrisk projektionsplan symmetriskt till två av huvudytorna: dimetrisk projektionsplan utan sådan symmetri: trimetrisk Parallellitet bevaras, inte vinklar & avstånd (samma förkortning)

Ortografisk-projektionsmatris

1 0 0 0 0 1 0 0 0 0 0 -d 0 0 0 1

x y z 1

= x y -d 1

MOp = Här är yp=y och xp=x och zp=-d så vi får

(i boken är d satt till 0)

Parametrisk form

Kurvor och ytor

Kubiska (grad 3)

Interpolerande Hermite Bezier B-Spline

Generell B-Spline

Polynom

Generella (grad d)

Uniform NURBS

Explicit form

Implicit form

Uppdelnings- procedur

Catmull-Clark Loop

Angel, kap.11

Representation av kurvor

x

y

1 0

1

0 x = u y = u

0 ≤ u ≤ 1

x = fx(u) y = fy(u)

umin ≤ u ≤ umax

y = f(x) y = x

f(x, y) = 0 x - y = 0

Explicit

Implicit

Para- metrisk

Generellt Exempel

I 3D, med z, lägg till: explicit: z = g(x); implicit: f(x, y,z) =0 & g(x, y,z) = 0; parameter z = fz(u)

Parametriska kurvor

Om vi deriverar uttrycket för kurvan

p(u) = fx(u) fy(u)

dp(u) du =

dfx(u) du

dfy(u) du

får vi en vektor som definierar kurvans tangent:

Exempel p(u) =

u u2

0 ≤ u ≤ 1

dp(u) du =

1 2u

I u = 0.5 får vi tangenten 1 1

Exempel

Parametriska polynomkurvor

p(u) =

cx0 + ucx1 + u2cx2 + ... + uncxn

0 ≤ u ≤ 1

fx(u) fy(u) fz(u)

=

Då p(u) är ett polynom i u kallas kurvan polynomkurva.

Polynomkurvor, visar det sig, har egenskaper som är intressanta för datorgrafik och CAD/CAM. Främst används tredjegrads- (kubiska) polynom.

cy0 + ucy1 + u2cy2 + ... + uncyn

cz0 + ucz1 + u2cz2 + ... + unczn

Interpolerande kubiska polynom

p0 = (p0x p0y p0z)T, p1 = (p1x p1y p1z)T, p2 = (p2x p2y p2z)T , p3 = (p3x p3y p3z)T

px =

p0x p1x p2x p3x

py =

p0y p1y p2y p3y

pz =

p0z p1z p2z p3z

p2 p0

p1

p3

Vi samlar koordinaterna i tre vektorer:

Antag att vi har fyra styrpunkter p0, p1, p2 och p3 och att vi vill att kurvan ska gå genom dessa punkter.

Interpolerande polynomkurvor Vi bestämmer att kurvan ska gå genom styrpunkterna vid

u = 0, u = 1/3, u = 2/3 och u = 1.

p2

p0

p1

p3

u = 0

u = 1/3

Vilka polynomkoefficienter ska vi ha?

u = 2/3

u = 1

Interpolerande polynomkurvor Låt oss börja med x-komponenten. Vi hade att

u = 0: p0x = cx0 u = 1: p3x = cx0 + cx1 + cx2 + cx3 u = 1/3: p1x = cx0 + (1/3)cx1 + (1/3)2cx2 + (1/3)3cx3 u = 2/3: p2x = cx0 + (2/3)cx1 + (2/3)2cx2 + (2/3)3cx3

fx(u) = cx0 + ucx1 + u2cx2 + u3cx3

och vi vill ha

fx(0) = p0x fx(1/3) = p1x fx(2/3) = p2x fx(1) = p3x

Interpolerande polynomkurvor Löser man ekvationssystemet får man

c0x = p0x c1x = –5.5p0x + 9p1x – 4.5p2x + p3x c2x = 9p0x – 22.5p1x + 18p2x – 4.5p3x c3x = –4.5p0x + 13.5p1x – 13.5p2x + 4.5p3x

y- och z-komponenterna får samma värden.

Kurvan som har dessa c-koefficienter sägs interpolera de fyra styrpunkterna.

Koefficient- matrisen

1  0 0 0 -5.5 9 -4.5 1 9  -22.5 18 -4.5 -4.5 13.5 -13.5 4.5

kallas interpolations- geometrimatris och kan användas vid all sådan interpolation

Exempel

p0 = (0 0)T p1 = (1 0)T p2 = (1 1)T

p3 = (0 1)T x

y

1 0

1

0 p0 p1

p2 p3

Exemplet

c0x = p0x c1x = –5.5p0x + 9p1x – 4.5p2x + p3x c2x = 9p0x – 22.5p1x + 18p2x – 4.5p3x c3x = –4.5p0x + 13.5p1x – 13.5p2x + 4.5p3x

p0 = (0 0)T p1 = (1 0)T p2 = (1 1)T p3 = (0 1)T

c0x = 0 c1x = –5.5⋅0 + 9⋅1 – 4.5⋅1 + 0 = 4.5 c2x = 9⋅0 – 22.5⋅1 + 18⋅1 – 4.5⋅0 = –4.5 c3x = –4.5⋅0 + 13.5⋅1 – 13.5⋅1 + 4.5⋅0 = 0

fx(u) = cx0 + ucx1 + u2cx2 + u3cx3

Exemplet fx(u) = 0 + 4.5u − 4.5u2 + 0 ⋅ u3

fy(u) = 0 − 3.5u + 13.5u2 − 9u3

Interpolationspolynomet är exempel på en parametrisk kubisk polynomkurva

dvs är en kurva på formen

där pi är kurvans styrpunkter

(som interpolationspolynomet går igenom men som kan styra på annat sätt, se Hermite, Bézier, splines)

och bi(u) är kurvans blandningsfunktion.

p(u) = b0(u)p0 + b1(u)p1 + b2(u)p2 + b3(u)p3

Blandningsfunktion, enkelt exempel Funktion b(u) som visar hur varje styrpunkt bidrar till kurvan när u sveps från 0 till 1.

Exempel: En kurva som interpolerar två styrpunkter:

P0

P1

fx(u) = (1 – u)p0x + up1x fy(u) = (1 – u)p0y + up1y

b0(u) = 1 – u b1(u) = u

Blandningsfunktioner, interpolation

p2

p0

p1

p3 u = 0

u = 1/3 u = 2/3

u = 1

b0 = -9(u - 1/3)(u – 2/3)(u-1) b1 = 27u(u-2/3)(u-1)/2 b2 = -27u(u-1/3)(u-1)/2 b3 = 9u(u - 1/3)(u – 2/3)

Blandningsfunktioner

Sammanlänkning av kurvor Icke-kontinuerlig

C0-kontinuerlig

C1-kontinuerlig (derivatan)

C2-kontinuerlig också krökning

(andraderivatan)

Hermitekurvor

Fås om man kräver C1-kontinuitet. Kurvans ekvation är (i 2D)

fx(u) = cx0 + ucx1 + u2cx2 + u3cx3 fy(u) = cy0 + ucy1 + u2cy2 + u3cy3

p0 = (p0x p0y)T p3 = (p3x p3y)T

Vi behåller första och sista styrpunkten:

Hermitekurvor Sedan väljer vi tangenten i p0 och p3 explicit, d.v.s.

df(u=0) du

dfx(u) du

dfy(u) du

= ≡ p′0x

p′0y

u = 0

u = 0

df(u=1) du

dfx(u) du

dfy(u) du

= ≡ p′3x

p′3y

u = 1

u = 1

Hermitekurvor

p0x = fx(0) = cx0 p3x = fx(1) = cx0 + cx1 + cx2 + cx3 p′0x = fx′(0) = cx1 p′3x = fx′(1) = cx1 + 2cx2 + 3cx3

fx(u) = cx0 + ucx1 + u2cx2 + u3cx3

För x-komponenten är kurvans ekvation

och dess derivata är

fx ′(u) = cx1 + 2ucx2 + 3u2cx3

Hermitekurvor

1 u u2 u3 fx(u) =

1 0 0 0 0 0 1 0 –3 3 –2 –1 2 –2 1 1

p0x p1x p′0x p′1x

y- och z-komponenterna blir samma.

Löser vi ekvationssystemet får vi

Hermite-geometri matris

Sammanlänkning av kurvor

Vi kan få C1-kontinuitet genom att sätta samman två Hermitekurvor där tangenten är densamma i P3 för första kurvan och P0 för andra kurvan:

P0 P3

P0

P3

Bézierkurvor Samma som Hermite men specificeras genom att

tangenterna definieras med linjer vars andra ändar är styrpunkter

Derivatorna blir

p0

p1 p2

p3

dp0 du = (p1 – p0)/(1/3)

dp3 du

= (p3 – p2)/(1/3)

Bézierkurvor

p0x = cx0 p1x = cx0 + cx1 + cx2 + cx3 3(p1x – p0x) = fx

′(0) = cx1 3(p3x – p2x) = fx′(1) = cx1 + 2cx2 + 3cx3

fx(u) = cx0 + ucx1 + u2cx2 + u3cx3

fx ′(u) = cx1 + 2ucx2 + 3u2cx3

Bézierkurvor

1 u u2 u3 fx(u) =

1 0 0 0 –3 3 0 0 3 –6 3 0 –1 3 –3 1

p0x p1x p2x p3x

Lösningen blir

Bézier-geometrimatris

Blandningsfunktioner b0 = (1-u)3

b1 = 3u(1-u)2 b2 = 3 u2(1-u) b3 = u3

Kubiska B-splinekurvor En nackdel med Hermitekurvor är att

C1-kontinuitet inte alltid räcker.

C2-kontinuitet (mellan kan åstadkommas genom att man släpper kravet att kurvan ska interpolera slutpunkterna på kurvan och ser till att andraderivatan blir lika för den spline som når en punkt från

ena hållet som för den spline som utgår åt andra hållet. pi-1 pi

pi+1 pi+2

Kubiska B-splinekurvor

1 u u2 u3 fx(u) =

1/6 2/3 1/6 0 –1/2 0 1/2 0 1/2 –1 1/2 0 –1/6 1/2–1/2 1/6

pi-2 pi-1 pi

pi+1

B-spline-geometrimatris

Se boken för härledningar:

Blandningsfunktioner b0 = (1-u)3 / 6 b1 = (4 - 6u2 + 3u3) / 6 b2 = (1 + 3u + 3u2 - 3u3) / 6 b3 = u3 / 6

Exempel

Ytor

p(u,v) = fx(u,v) fy(u,v) fz(u,v) x

z u v

x = u+v y = u-v

z = u2+v2 0 ≤ u ≤ 1

x = fx(u,v) y = fy(u,v) z = fz(u,v)

umin ≤ u ≤ umax

z = f(x,y) z=xy

f(x, y, z) = 0 x2+y2+z2 -1 = 0

Explicit

Implicit

Para- metrisk

Generellt Exempel

Parametriska ytor

∂p(u,v)

∂fx(u,v) ∂u

∂fy(u,v) ∂u

∂fz(u,v) ∂u

De vektorer vi får om vi deriverar m.a.p. u och v definierar ytans tangentplan:

∂u =

∂p(u,v)

∂fx(u,v) ∂v

∂fy(u,v) ∂v

∂fz(u,v) ∂v

∂v =

∂p(u,v) ∂u

× ∂p(u,v) ∂v

N(u,v) = är ytans normal.

Exempel

Kubiska polynomytor

0 ≤ u ≤ 1 0 ≤ v ≤ 1

fx(u, v) fy(u, v) = fz(u, v)

∑ i = 0

3

∑ j = 0

3 uivj

cxij cyij czij

p(u,v) =

Interpolerande polynomytor

Kräver 16 styrpunkter:

p00

p33

p10 p20 p30

p01 p02 p03

p13 p23

v

u

Interpolerande polynomytor

Om vi sätter v = 0 får vi en kurva som ska interpolera punkterna p00, p10, p20 och p30.

v = 0

u

v

p00

p33

p10 p20 p30

p01 p02 p03

p13 p23

Interpolerande polynomytor

Sätter vi v = 1 får vi en kurva som måste interpolera punkterna p03, p13, p23 och p33.

v = 1

u

v

p00

p33

p10 p20 p30

p01 p02 p03

p13 p23

Interpolerande polynomytor

Lägger man till v = 1/3 och v = 2/3 får man ett linjärt ekvationssytem.

När man löser detta (se boken) får man koefficienterna för polynomen.

Interpolerande polynomytor

Bézierytor

På motsvarande sätt som för interpolerande ytor (se boken).

Inlämningsuppgift 3

top related