Skip to content

Křivky a povrchy

octicon-noteNote

Implicitní a parametrické reprezentace. Interpolace a aproximace. Cn, Gn spojitost, podmínky spojitosti pro po částech definované funkce. Bézierovy křivky, B-spline křivky, NURBS, Coonsovy křivky a pláty. Povrchy tvořené rekurzivním dělením polygonů.
PB009, PA010

Jak povrchy tak křivky mohou být reprezentovány třemi způsoby:

Křivka nebo povrch je vyjádřen pomocí funkce.

y=f(x) pro krˇivkuz=f(x,y) pro povrch\begin{align*} y &= f(x) & \text{ pro křivku} \\ z &= f(x, y) & \text{ pro povrch} \end{align*}

Omezení na funkce je však příliš silné. Spoustu pěkných křivek a povrchů nelze vyjádřit pomocí jediné funkce.

Máme k dispozici rovnici ve tvaru:

F(x,y)=c pro krˇivkuF(x,y,z)=c pro povrch\begin{align*} F(x, y) &= c & \text{ pro křivku} \\ F(x, y, z) &= c & \text{ pro povrch} \end{align*}

kde cc je konstanta a je obvykle rovná 0.

Tato rovnice udává množinu bodů, ze které se křivka nebo povrch sestává. Takové množině se někdy říká level set a metodám, které s nimi pracují level-set methods.

octicon-importantImportant

Výhodou implicitně zadaných ploch je kompaktnější reprezentace a jednodušší ray casting. Nicméně výpočty s nimi jsou časově náročné, takže se stejně nejdřív převádí na polygonové meshe — polygonizace.

octicon-importantImportant

Tahle sekce přesahuje do 3D modelování a datové struktury -> Implicitní reprezentace a modelování.

Udává dráhu pohybujícího se bodu, či něco jako hladinu povrchu. Snadno se z ní vyjadřuje tečna, čehož se využívá při jejich skládání.

Pro křivky:

Q(t)=[x(t),y(t),z(t)] (bodovaˊ rovnice krˇivky)q(t)=(x(t),y(t),z(t)) (vektorovaˊ rovnice krˇivky)\begin{align*} Q(t) &= \lbrack x(t), y(t), z(t) \rbrack & \text{ (bodová rovnice křivky)} \\ \vec{q}(t) &= (x(t), y(t), z(t)) & \text{ (vektorová rovnice křivky)} \end{align*}

kde tt je “čas” z intervalu [tmin,tmax]\lbrack t_\text{min}, t_\text{max} \rbrack, nejčastěji [0,1]\lbrack 0, 1 \rbrack. Výhodné je, že takto zadaná křivka se může sama křížit, uzavírat, a podobně.

Analogicky pro povrchy:

Q(u,v)=[x(u,v),y(u,v),z(u,v)]Q(u, v) = \lbrack x(u, v), y(u, v), z(u, v) \rbrack

kde pro uu a vv už metafora s časem nefunguje. Obvykle obě náleží do intervalu [0,1]\lbrack 0, 1 \rbrack.

Pro zbytek otázky je podstatné znát několik termínů:

  • Dotykový / tečný / tangent vektor křivky
    Aktuální směr křivky v daném bodě. Z parametricky vyjádřené křivky q\vec{q} ho lze v čase t0t_0 získat jako derivaci:

    q(t0)=(x(t0)t,y(t0)t,z(t0)t)\vec{q}'(t_0) = \left( \frac{\partial x(t_0)}{\partial t}, \frac{\partial y(t_0)}{\partial t}, \frac{\partial z(t_0)}{\partial t} \right)

    Rovnice tečny p\vec{p} je pak p(u)=q(t0)+q(t0)u\vec{p}(u) = \vec{q}(t_0) + \vec{q}'(t_0) \cdot u.

  • Polynomiální křivka
    Velmi častý druh křivek v počítačové grafice. Vypadají jako:

    Qn(t)=a0+a1t+a2t2++antnQ_n(t) = a_0 + a_1 \cdot t + a_2 \cdot t^2 + \ldots + a_n \cdot t^n

    Je velmi snadné je evaluovat a derivovat. Z nich často skládáme křivky po částech.

  • Kubika
    Polynomiální křivka třetího stupně.

    Parametricky:

    x(t)=axt3+bxt2+cxt+dxy(t)=ayt3+byt2+cyt+dyz(t)=azt3+bzt2+czt+dz\begin{align*} x(t) = a_{x}t^{3} + b_{x}t^{2} + c_{x}t + d_{x} \\ y(t) = a_{y}t^{3} + b_{y}t^{2} + c_{y}t + d_{y} \\ z(t) = a_{z}t^{3} + b_{z}t^{2} + c_{z}t + d_{z} \end{align*}

    Zapsáno pomocí matice:

    Q(t)=TC=[t3,t2,t,1][axayazbxbybzcxcyczdxdydz]Q(t) = T \cdot C = \lbrack t^3, t^2, t, 1 \rbrack \cdot \begin{bmatrix} a_x & a_y & a_z \\ b_x & b_y & b_z \\ c_x & c_y & c_z \\ d_x & d_y & d_z \end{bmatrix}

    Tečný vektor q\vec{q'} je pak:

    q(t)=tC=[3t2,2t,1,0]C\vec{q'}(t) = \frac{\partial}{\partial t} \cdot C = \lbrack 3t^2, 2t, 1, 0 \rbrack \cdot C

    U kubik platí, že C=MGC = M \cdot G, kde MM je bázová matice a GG je vektor geometrických podmínek.

    • TMT \cdot M definuje polynomiální bázi — skupinu polynomů — která je společná pro všechny křivky určitého typu.
    • GG pak obsahuje parametry konkrétní křivky — řídící a dotykové body.
    • tt udává, jestli jsme na začátku či konci křivky.
  • Tečná rovina
    Rovina, která se povrchu dotýká v konkrétním bodě a její normála je na povrch kolmá. Pro parametrickou plochu QQ je tečná plocha TT dána jako:

    qu(u,v)=Q(u,v)u=(x(u,v)u,y(u,v)u,z(u,v)u)qv(u,v)=Q(u,v)v=(x(u,v)v,y(u,v)v,z(u,v)v)T(r,s)=Q(u,v)+r.qu+s.qv,r,sR\begin{align*} \vec{q_{u}}(u,v) &= \frac{\partial Q(u,v)}{\partial u} = \left( \frac{\partial x(u,v)}{\partial u}, \frac{\partial y(u,v)}{\partial u}, {\partial z(u,v) \over \partial u} \right) \\ \vec{q_{v}}(u,v) &= \frac{\partial Q(u,v)}{\partial v} = \left( \frac{\partial x(u,v)}{\partial v}, \frac{\partial y(u,v)}{\partial v}, {\partial z(u,v) \over \partial v} \right) \\ T(r,s) &= Q(u,v) + r.\vec{q_{u}} + s.\vec{q_{v}}, \quad r,s \in \mathbb{R} \end{align*}

    kde qu\vec{q_u} je tečný vektor ve směru parametru uu, a analogicky qv\vec{q_v}

  • Normála / kolmice
    Normálu n\vec{n} parametricky dané plochy QQ určíme jako vektorový součin tečných vektorů:

    n=qu×qvqu×qv\vec{n} = \frac{\vec{q_u} \times \vec{q_v}}{\left\lVert \vec{q_u} \times \vec{q_v} \right\rVert}
  • Gradient
    Funkce, která vrací “směr a velikost největšího růstu”. Nejčastěji se používá u povrchů k určení normály, ale lze ji použít v libovolné dimenzi k různým účelům. Pokud je povrch ff zadán implicitně, pak je gradient:

    f=(fx,fy,fz)\nabla f = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right)
  • Interpolace
    Prokládání daných bodů křivkou. Konstrukce křivky, která interpolovanými body prochází.

    V případě kubiky výše to znamená, že GG obsahuje body, kterými křivka prochází.

    Mějmě funkci f(x)f(x), jejíž hodnotu známe v bodech f(x0),f(x1),,f(xn)f(x_0), f(x_1), \ldots, f(x_n). Interpolace znamená nalezení hodnot f(x)f(x) pro všechna x0<x<xnx_0 < x < x_n.

  • Aproximace
    Přiblížení, odhad. Je nepřesným popisem nějaké jiné entity (např. čísla či funkce). Saháme k ní, pokud pro analytické řešení nemáme dost informací nebo výpočetní kapacity. Aproximace je méně přesná než interpolace, ale výpočetně jednodušší.

    V případě kubiky výše to znamená, že GG obsahuje řídící body, které sice udávají směr křivky, ale ta jimi neprochází.

Představme si, že máme dva segmenty křivky: Q1Q_1 a Q2Q_2, spojené v bodě tt, tedy Q1(t)=Q2(t)Q_1(t) = Q_2(t). Tento bod nazýváme uzlem (knot). Spojitost je zjednodušeně způsob, jakým jsou tyhle segmenty spojeny v uzlu.

Parametrická spojitost stupně nn (CnC^n)

Section titled “Parametrická spojitost stupně nnn (CnC^nCn)”

Křivka QQ patří do třídy CnC^n, pokud má ve všech bodech tt spojitou derivaci až do řádu nn.

  • C0C^0 — dva segmenty jsou spojené; konečný bod jednoho segmentu je počátečním bodem druhého.

  • C1C^1 — platí C0C^0 a navíc je tečný vektor na konci prvního segmentu shodný s tečným vektorem na začátku druhého segmentu — první derivace v uzlu jsou si rovny.

  • C2C^2 — platí C1C^1 a druhé derivace v uzlu jsou si rovny.

  • CnC^n — platí Cn1C^{n-1} a navíc jsou si nn-té derivace v uzlu rovny.

  • Bod pohybující se po C0C^0-spojité dráze sebou “trhne” v prostoru, když projde uzlem.

  • V případě C1C^1 křivky se při průchodu uzlem směr ani rychlost prudce nezmění, může se však změnit zrychlení.

  • V případě C2C^2 křivky se při průchodu uzlem nezmění už ani zrychlení.

Geometrická spojitost stupně nn (GnG^n)

Section titled “Geometrická spojitost stupně nnn (GnG^nGn)”

Je podobná parametrické spojitosti, ale vyžaduje jen “geometrickou” spojitost. Vyžaduje, aby si derivace byly sobě úměrné. 1 2

  • G0G^0 — koncový bod prvního segmentu je totožný s počátečním bodem druhého segmentu (C0=G0C^0 = G^0).
  • G1G^1 — platí G0G^0 a navíc je směr tečny na konci prvního segmentu shodný s směrem tečny na začátku druhého segmentu. Velikost tečného vektoru (rychlost) se však může prudce změnit.
  • G2G^2 — platí G1G^1 a navíc mají stejný střed křivosti (center of curvature). 3

Platí, že CnGnC^n \Rightarrow G^n, ale obráceně Gn⇏CnG^n \not\Rightarrow C^n.

octicon-noteNote

Podle slidů z PB009 musí faktor úměrnosti být různý od 0. 4 Podle Barskyho a DeRoseho musí v první derivaci být >0> 0 a v dalších už je to šumák. 2 Co je správně? Kdo ví. Nemám dost častu to zjistit, takže to ponechávám jako cvičení čtenáři.

Základní metoda interpolace funkce, jejíž hodnotu známe jen v n+1n + 1 diskrétních bodech P0,P1,...PnP_0, P_1, ... P_n. Sestává se z pomocných polynomů i\ell_i: 5

i(x)=0kn,kinxxkxixk\ell_i(x) = \prod_{0 \le k \le n, k \neq i}^n \frac{x - x_k}{x_i - x_k}

Který splňuje podmínku:

i(xk)={1 pro i=k0 pro ik\ell_i(x_k) = \begin{cases} 1 & \text{ pro } i = k \\ 0 & \text{ pro } i \neq k \end{cases}

Pak polynom PP interpoluje danou množinu bodů:

P(x)=i=0nPii(x)P(x) = \sum_{i=0}^n P_i \ell_i(x)

Blbé je, že musíme všechny pomocné polynomy přepočítat, když přidáme nový bod.

  • Hornerovo schéma / Horner’s method
    Metoda evaluace polynomů. Vychází z myšlenky, že násobení se dá nestovat: 6

    a0+a1x+a2x2+...+anxn=a0+x(a1+x(a2+...+x(an1+xan)...))\begin{aligned} & a_0 + a_1 \cdot x + a_2 \cdot x^2 + ... + a_n \cdot x_n \\ & = a_0 + x(a_1 + x(a_2 + ... + x(a_{n-1} + x \cdot a_n)...)) \end{aligned}

    Vyžaduje jen nn násobení a nn sčítání, což je optimální.

Asi nejznámnější interpolační křivky v počítačové grafice. Jsou určeny dvěma řídícími body — P0P_0 a P1P_1 — a dvěma dotykovými vektory — p0\vec{p_0'} a p1\vec{p_1'}. Řídící body určují začátek a konec křivky, dotykové vektory její směr a vyklenutí. Pokud jsou oba vektory nulové, je to úsečka.

Je jednoduché je na sebe navázat v C1C^1, neboť tečné vektory jsou přímo součástí definice.

  • Cubic Hermite spline / Ferguson curve
    Pro Hermitovskou kubiku platí: 7 8

    Q(t)=[t3t2t1][2211332100101000][P0P1p0p1]==P0F1(t)+P1F2(t)+p0F3(t)+p1F4(t)\begin{aligned} Q(t) &= \begin{bmatrix} t^{3} & t^{2} & t & 1 \end{bmatrix} \cdot \begin{bmatrix} 2 & -2 & 1 & 1 \\ -3 & 3 & -2 & -1 \\ 0 & 0 & 1 & 0 \\ 1 & 0 & 0 & 0 \end{bmatrix} \cdot \begin{bmatrix} P_{0} \\ P_{1} \\ \vec{p'}_{0} \\ \vec{p'}_{1} \end{bmatrix} = \\ &= P_0 \cdot F_1(t) + P_1 \cdot F_2(t) + \vec{p'}_0 \cdot F_3(t) + \vec{p'}_1 \cdot F_4(t) \end{aligned}

    kde F1,F2,F3,F4F_1, F_2, F_3, F_4 jsou Hermitovské polynomy 3. stupně:

    F1(t)=2t33t2+1F2(t)=2t3+3t2F3(t)=t32t2+tF4(t)=t3t2\begin{aligned} \textcolor{red}{F_1(t)} &= 2t^3 - 3t^2 + 1 \\ \textcolor{blue}{F_2(t)} &= -2t^3 + 3t^2 \\ \textcolor{green}{F_3(t)} &= t^3 - 2t^2 + t \\ \textcolor{cyan}{F_4(t)} &= t^3 - t^2 \end{aligned}

    width=500

Asi nejčastěji používaná aproximační křivka. Využívá se zejména ve 2D grafice, třeba při definici fontů.

  • Bézierova křivka nn-tého stupně je definována n+1n + 1 řídícími body P0,P1,...PnP_0, P_1, ... P_n.
  • Změnou polohy jednoho bodu dojde ke změně celé křivky. Proto se často dělí na segmenty menšího stupně, které se pak navazují na sebe.

Základem jsou Bernsteinovy polynomy nn-tého stupně:

[stem] b_{\nu,n}(x) = \binom{n}{\nu} x^{\nu} \left( 1 - x \right)^{n - \nu}, \quad \nu = 0, \ldots, n,

Mezi jejich vlastnosti patří:

  • Nezápornost: bν,n(x)0b_{\nu,n}(x) \ge 0 pro x[0,1]x \in \lbrack 0, 1 \rbrack.
  • Jejich součet je roven jedné: ν=0nbν,n(x)=1\sum_{\nu = 0}^n b_{\nu,n}(x) = 1.
  • Dají se vyjádřit rekurzí: bν,n(x)=(1x)bν,n1(x)+xbν1,n1(x)b_{\nu,n}(x) = (1 - x) \cdot b_{\nu,n-1}(x) + x \cdot b_{\nu-1,n-1}(x).

Bernstein basis polynomials for 4th degree curve blending by VisorZ

width=500

  • DeCasteljau algorithm
    Rekurzivní algoritmus pro konstrukci Bézierových křivek. Využívá vlastností Bernsteinových polynomů.

    width=100%

  • Bézierova kubika
    Bézierova křivka třetího stupně. Je dána čtyřmi řídícími body P0,P1,P2,P3P_0, P_1, P_2, P_3:

    P(t)=(1t)3P0+3(1t)2tP1+3(1t)t2P2+t3P3P(t) = (1 - t)^3 \cdot P_0 + 3 \cdot (1 - t)^2 \cdot t \cdot P_1 + 3 \cdot (1 - t) \cdot t^2 \cdot P_2 + t^3 \cdot P_3
  • Splajn / spline
    Splajn stupně nn po částech definovaná polynomiální funkce stupně n1n-1 proměnné xx. 9

    Po částech definovaná / piecewise znamená, že má několik intervalů a pro každý z nich jiný polynom.

    • Místa, kde se části polynomu dotýkají jsou uzly a jsou značeny pomocí t0,t1,...,tnt_0, t_1, ..., t_n a řazeny v neklesajícím pořadí.
    • Pokud jsou uzly unikátní, pak je splajn v uzlech Cn2C^{n-2} spojitý. 9
    • Pokud je rr uzlů shodných, je v tomto místě pouze Cnr1C^{n-r-1} spojitý.

Basis spline / B-spline stupně nn je aproximační křivka / splajn daná sekvencí nn uzlů. Jako funkce vrací užitečné hodnoty jen mezi prvním a posledním uzlem, všude jinde je nulová. Svůj název dostala podle toho, že B-splajny slouží jako bázové funkce pro splajnové křivky.

width=400

Lze ji definovat pomocí Cox-de Boorovy rekurzivní formule:

octicon-tipTip

de Boorův algoritmus je generalizací DeCasteljauova algoritmu ale pro B-splajny.

Bi,0(x)={1pro tix<ti+10jinakBi,n(x)=xtiti+ntiBi,n1(x)+ti+n+1xti+n+1ti+1Bi+1,n1(x)\begin{aligned} B_{i,0}(x) &= \begin{cases} 1 & \text{pro } t_i \le x < t_{i+1} \\ 0 & \text{jinak} \end{cases} \\ B_{i,n}(x) &= \textcolor{red}{\frac{x - t_i}{t_{i+n} - t_i}} B_{i,n-1}(x) + \textcolor{blue}{\frac{t_{i+n+1} - x}{t_{i+n+1} - t_{i+1}}} B_{i+1,n-1}(x) \end{aligned}

Zatímco xx jde od tit_i k ti+nt_{i+n}, červený výraz začíná na 1 a klesá k 0.

Podobně, zatímco xx jde od ti+1t_{i+1} k ti+n+1t_{i+n+1}, modrý výraz začíná na 0 a roste k 1.

Navíc platí i=0nBi,n(x)=1\sum_{i=0}^{n} B_{i,n}(x) = 1.

Jejich užitečnost spočívá v tom, že libovolný splajn stupně nn daný sekvencí uzlů lze vyjádřit jako lineární kombinaci B-splajnů:

S(x)=i=0ciBi,n(x)S(x) = \sum_{i=0} c_i B_{i,n}(x)

octicon-noteNote

Uzlů je zpravidla víc než n+1n+1, protože pak teprve máme víc než jeden B-spline, který kombinujeme.

  • Uniformní B-splajny
    Uzly jsou rozloženy rovnoměrně. Tedy mezi každými dvěma uzly tit_i a ti+1t_{i+1} je stejná vzdálenost hh.

    Příklad:

    T=[t0t1t2t3]=[00.30.61]T = \begin{bmatrix} t_0 & t_1 & t_2 & t_3 \end{bmatrix} = \begin{bmatrix} 0 & 0.\overline{3} & 0.\overline{6} & 1 \end{bmatrix}
  • Coonsova kubika
    Kubika PP daná 4 řídícími body P0,P1,P2,P3P_0, P_1, P_2, P_3. Neprochází ani jedním z kontrolních bodů. 10

    P(t)=B0(t)P0+B1(t)P1+B2(t)P2+B3(t)P3,t[0,1]B0(t)=16(1t)3B1(t)=16(3t36t2+4)B2(t)=16(3t3+3t2+3t+1)B3(t)=16t3\begin{aligned} P(t) &= B_0(t) \cdot P_0 + B_1(t) \cdot P_1 + B_2(t) \cdot P_2 + B_3(t) \cdot P_3, t \in \lbrack 0, 1 \rbrack \\ B_0(t) &= \frac{1}{6} (1 - t)^3 \\ B_1(t) &= \frac{1}{6} (3t^3 - 6t^2 + 4) \\ B_2(t) &= \frac{1}{6} (-3t^3 + 3t^2 + 3t + 1) \\ B_3(t) &= \frac{1}{6} t^3 \end{aligned}

    width=400

    octicon-noteNote

    Něco ohledně tohohle termínu mi hrozně smrdí. Zdá se, že jediní, kdo používají “coons cubic curve” jsme my a ČVUT.

Interpolace je náročná, proto se častěji používají aproximační povrchy.

Plocha P\vec{P}. Dáno:

  • (m+1)×(n+1)(m + 1) \times (n + 1) řídících bodů Pi,j\vec{P}_{i,j}.
  • m+1m + 1 hodnot uku_k a n+1n + 1 hodnot vlv_l.

Platí, že P(uk,ul)=Pk,l\vec{P}(u_k, u_l) = \vec{P}_{k,l} pro k=0,1,...,mk = 0, 1, ..., m a l=0,1,...,nl = 0, 1, ..., n.

Interpolujeme vektorovým polynomem ai,j\vec{a}_{i,j}:

P(u,v)=i=0mj=0nai,juivj\vec{P}(u, v) = \sum_{i = 0}^m \sum{j = 0}^n \vec{a}_{i,j} \cdot u^i \cdot v^j

V případě Lagrangeova polynomu je ai,j=im(u)jn(v)\vec{a}_{i,j} = \ell_i^m(u) \cdot \ell_j^n(v).

Interpolační povrch.

  • 12-ti vektorová varianta
    4 rohové body a 8 tečných vektorů.

    width=300

  • 16-ti vektorová varianta
    4 rohové body, 8 tečných vektorů a 4 zkrutové vektory.

    width=300

Coonsovy pláty / Coonsovy plochy / Coons patch

Section titled “Coonsovy pláty / Coonsovy plochy / Coons patch”

Plochy vzniknuvší interpolací mezi křivkami udávající jejich okraje. Dají se na sebe pěkně napojovat, právě protože jsou definovány svými okraji.

octicon-warningWarning

Coonsovy pláty jsou interpolační, zatímco Coonsovy křivky jsou aproximační.

  • Bilineární Coonsovy pláty

    Určeny 4 křivkami P(u,0),P(u,1),P(0,v),P(1,v)P(u, 0), P(u, 1), P(0, v), P(1, v), které tvoří okraj plátu.

    Implicitně se dá zapsat jako:

    [1u1u]C[1v1v]=0\begin{bmatrix} 1-u & -1 & u \end{bmatrix} \cdot C \cdot \begin{bmatrix} 1-v \\ -1 \\ v \end{bmatrix} = 0

    Povrch je pak tvořen body CC, které tuto rovnici splňují.

    Explicitně se dá zapsat jako:

    P(u,v)=[1uu][P0,vP1,v]+[Pu,0Pu,1][1vv][1uu][P0,0P0,1P1,0P1,1][1vv]P(u, v) = \begin{bmatrix} 1 - u & u \end{bmatrix} \cdot \begin{bmatrix} P_{0, v} \\ P_{1, v} \end{bmatrix} + \begin{bmatrix} P_{u, 0} & P_{u, 1} \end{bmatrix} \cdot \begin{bmatrix} 1 - v \\ v \end{bmatrix} - \begin{bmatrix} 1 - u & u \end{bmatrix} \cdot \begin{bmatrix} P_{0, 0} & P_{0, 1} \\ P_{1, 0} & P_{1, 1} \end{bmatrix} \cdot \begin{bmatrix} 1 - v \\ v \end{bmatrix}

    width=400

    Zásadním nedostatek těchto ploch je, že není snadné vyjádřit tečné vektory na okrajích, a proto není snadné je napojovat na sebe.

  • Bikubické Coonsovy pláty

    Podobné bilineárním, ale používájí Hermitovské polynomy:

    F1(t)=2t33t2+1F2(t)=2t3+3t2\begin{aligned} F_1(t) &= 2t^3 - 3t^2 + 1 \\ F_2(t) &= -2t^3 + 3t^2 \\ \end{aligned}

    Implicitně je pak tento plát dán:

    [F1(u)1F2(u)]C[F1(v)1F2(v)]=0\begin{bmatrix} F_1(u) & -1 & F_2(u) \end{bmatrix} \cdot C \cdot \begin{bmatrix} F_1(v) \\ -1 \\ F_2(v) \end{bmatrix} = 0

    Stejně jako u bilineárních ploch, i tady je těžké získat tečné vektory na okrajích.

  • Obecná bikubická plocha

    Kromě rohů je parametrizována i tečnými vektory na okrajích. Konečně tedy umožňuje snadné navazování.

Aproximační plochy dány (m+1)×(n+1)(m + 1) \times (n + 1) řídícími body. Jsou:

  • snadno diferencovatelné,
  • jednoduše se modelují,
  • lze z nich relativně snadno spočítat průnik s paprskem,
  • speciální případ NURBS ploch.
P(u,v)=i=0mj=0nBim(u)Bjn(v)ai,jP(u, v) = \sum_{i=0}^m \sum_{j=0}^n B_i^m(u) \cdot B_j^n(v) \cdot \vec{a}_{i,j}

Kde Bim(u)B_i^m(u) a Bjn(v)B_j^n(v) jsou Bernsteinovy polynomy.

width=400

Při změně jendoho z bodů se změní celá plocha, proto se často více plátů spojuje dohromady. Pro spojitost G0G^0 se musí rovnat řídící body na okrajích. Pro G0G^0 musí tečné vektory na okrajích být lineárně závislé.

Zobrazují se rekurzivním dělením (patch splitting). Využívá se algoritmu de Casteljau.

Aproximační plochy analogické B-spline křivkám, ale se dvěma parametry.

  • Jsou lepší pro modelování než Hermitovské nebo Bézierovy plochy, protože se lépe navazují, jelikož B-splajny stupně kk garantují spojitost Ck1C^{k-1}.

  • Změnou jednoho řídícího bodu nezměníme celou plochu, ale jen část.

  • Celá plocha leží v konvexním obalu řídících bodů.

  • Průchodu řídícím bodem lze dosáhnout zvýšením jeho násobnosti (a tak snížením spojitosti).

  • Invariantní k lineárním transformacím.

  • NURBS plochy

    Standard v průmyslovém modelování. Umožňují definovat velké množstí ploch: free-form surfaces, plochy založené na přímkách a kuželosečkách, atd. 11 Jsou invariantní k lineárním transformacím i k perspektivní projekci.

    S(u,v)=i=1kj=1lRi,j(u,v)Pi,jS(u,v) = \sum_{i=1}^k \sum_{j=1}^l R_{i,j}(u,v) \mathbf{P}_{i,j}

    kde Pi,j\mathbf{P}_{i,j} jsou řídící body a Ri,j(u,v)R_{i,j}(u,v) jsou NURBS bázové funkce:

    Ri,j(u,v)=Ni,n(u)Nj,m(v)wi,jp=1kq=1lNp,n(u)Nq,m(v)wp,qR_{i,j}(u,v) = \frac {N_{i,n}(u) N_{j,m}(v) w_{i,j}} {\sum_{p=1}^k \sum_{q=1}^l N_{p,n}(u) N_{q,m}(v) w_{p,q}}

    Ni,n(u)N_{i,n}(u) a Nj,m(v)N_{j,m}(v) jsou B-spline bázové funkce stupně nn a mm. wi,jw_{i,j} jsou váhy.

octicon-tipTip

NURBS plochy se využívají v modelovací technice sweeping (šablonování), kdy se množina bodů pohybuje (posunuje, rotuje, …) prostorem za vniku tělesa. 12

Surface subdivision / rekurzivní dělení polygonů

Section titled “Surface subdivision / rekurzivní dělení polygonů”

Polygonové povrchy dělíme v případě, kdy chceme je zjemnit, vyhladit.

  • Pravidla dělení
    Dělení dodržují nějaké pravidlo.

    • Topologická pravidla: udávají vztahy pro generování nových vrcholů, hran, atd. z topologie objektu.
    • Geometrická pravidla: generují nové vrcholy, hrany, atd. na základě intepolací sousedních vrcholů.
  • Extraordinary vertices / mimořádné vrcholy

    Vrcholy, které mají jiný počet sousedů (valenci) než ostatní vrcholy.

  • 4-point scheme

    Interpolace C1C^1 křivkou.

  • Catmull-Clark

    Aproximuje původní mesh. Zachovává C2C^2, na mimořádných bodech ale jen C1C^1. Po první iteraci vždy vznikou quady. Založený na bikubických uniformních B-splinech.

  • Doo-Sabin

    Aproximuje původní mesh. Narozdíl od Catmull-Clark je založený na bikvadratických uniformních B-splinech.

    width=400

  • Loop

    Aproximuje původní mesh. Funguje jen na trojúhelníkové síti.

  • Butterfly

    Interpoluje původní mesh. Funguje jen na trojúhelníkové síti.

  1. Jaakko Kurhila and Matti Mäkelä: Parametric Curves

  2. Geometric Continuity of Parametric Curves: Three Equivalent Characterizations 2

  3. Wikipedia: Smoothness

  4. Sochor: PB009 Principles of Computer Graphics (jaro 2019)

  5. Wikipedia: Lagrange polynomial

  6. Wikipedia: Horner’s method

  7. Wikipedia: Cubic Hermite spline

  8. ČVUT: Ferguson curve

  9. Wikipedia: B-spline 2

  10. ČVUT: Coons curve

  11. Wikipedia: Non-uniform rational B-spline

  12. Wikipedia: Solid modeling