16.07.2015 Views

Matematické základy počítačové grafiky - Barborka - Vysoká škola ...

Matematické základy počítačové grafiky - Barborka - Vysoká škola ...

Matematické základy počítačové grafiky - Barborka - Vysoká škola ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Matematické základy počítačové<strong>grafiky</strong>Eduard Sojka, Martin Němec,Tomáš FabiánText byl vytvořen v rámci realizace projektu Matematika pro inženýry21. století (reg. č. CZ.1.07/2.2.00/07.0332), na kterém se společně podílelaVysoká škola báňská – Technická univerzita Ostrava a Západočeskáuniverzita v Plzni


Eduard Sojka, Martin Němec, Tomáš FabiánMatematické základy počítačové <strong>grafiky</strong>c○ Eduard Sojka, Martin Němec, Tomáš Fabián, 2011ISBN


PředmluvaVážený čtenáři,tento text by měl sloužit studentům jako výukový materiál pro studium předmětů„Základy počítačové <strong>grafiky</strong>“, „Počítačová grafika“ a „Geometrie pro počítačovougrafiku“. Celý výukový materiál je rozdělen do třech částí, jejichž obsah je volen tak,aby posluchač získal základní přehled probíraných témat v uvedených předmětech.První část se zabývá teorií afinních prostorů a afinních transformací. Následně je textzobecněn na projektivní prostory a projektivní transformace. Studiem této kapitolyzískáte informace o transformacích v počítačové grafice a jejich možnostech. Druhákapitola se zabývá teorii křivek a ploch. Nejdříve jsou uvedeny základní obecnévlastnosti a následně jsou popsány jednotlivé typy křivek a ploch až po v dnešnídobě nejpoužívanější NURBS křivky a plochy, kterým je věnováno nejvíce prostoru.Třetí a poslední část tohoto textu je věnována popisu a možnostem modelovánítěles. V této kapitole najdete základní typy reprezentace a popisu těles používanév počítačové grafice. Prosíme čtenáře o schovívavost při studiu těchto materiálůa v případě nalezení nedostatků či chyb laskavě žádáme o jejich sdělení na adresyautorů 1V Ostravě 31. 8. 2011Autoři1 eduard.sojka@vsb.cz martin.nemec@vsb.cz tomas.fabian@vsb.cziii


ObsahPředmluvaiii1 Afinní a projektivní prostory 11.1 Afinní prostor a afinní transformace . . . . . . . . . . . . . . . . . . . 11.2 Změna souřadné soustavy . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Ortonormalita afinní transformace . . . . . . . . . . . . . . . . . . . . 41.4 Projektivní prostor, projektivní transformace . . . . . . . . . . . . . . 71.5 Stanovení matice zobrazovací transformace – příklad A . . . . . . . . 161.6 Stanovení matice zobrazovací transformace – příklad B . . . . . . . . 181.7 Stanovení matice zobrazovací transformace – příklad C . . . . . . . . 241.8 Transformace na výstupní zařízení . . . . . . . . . . . . . . . . . . . . 261.9 Inverze zobrazovací transformace – příklad D . . . . . . . . . . . . . . 271.10 Dodatky ke kapitole o afinních prostorech a afinních transformacích . 292 Křivky a plochy v počítačové grafice 312.1 Křivka a její vlastnosti . . . . . . . . . . . . . . . . . . . . . . . . . . 322.1.1 Parametrizace křivky . . . . . . . . . . . . . . . . . . . . . . . 362.1.2 Tečný vektor, tečna . . . . . . . . . . . . . . . . . . . . . . . . 362.1.3 Oskulační rovina . . . . . . . . . . . . . . . . . . . . . . . . . 372.1.4 Křivost a torze křivky . . . . . . . . . . . . . . . . . . . . . . 392.1.5 Oskulační kružnice . . . . . . . . . . . . . . . . . . . . . . . . 412.1.6 Parametrická a geometrická spojitost . . . . . . . . . . . . . . 422.1.7 Vlastnosti křivek v počítačové grafice . . . . . . . . . . . . . . 422.2 Plochy v počítačové grafice . . . . . . . . . . . . . . . . . . . . . . . . 432.2.1 Vlastnosti ploch . . . . . . . . . . . . . . . . . . . . . . . . . . 442.2.2 u-křivky, v-křivky . . . . . . . . . . . . . . . . . . . . . . . . . 452.2.3 Křivost plochy . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.3 Polynomiální křivky . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.3.1 Interpolace algebraickým polynomem . . . . . . . . . . . . . . 462.3.2 Interpolace po částech . . . . . . . . . . . . . . . . . . . . . . 492.3.3 Hermitův interpolační polynom . . . . . . . . . . . . . . . . . 492.4 Metoda nejmenších čtverců . . . . . . . . . . . . . . . . . . . . . . . . 512.5 Fergusonova křivka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54iv


2.5.1 Navazování Fergusonových kubik . . . . . . . . . . . . . . . . 572.6 Spline křivky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.7 Bézierova křivka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.7.1 Základní vlastnosti Bézierovy křivky . . . . . . . . . . . . . . 602.7.2 Použití Bézierových křivek . . . . . . . . . . . . . . . . . . . . 622.7.3 Geometrická konstrukce bodů Bézierových křivek . . . . . . . 622.7.4 Konverze Fergusonovy kubiky na Bézierovu kubiku . . . . . . 632.7.5 Bézier spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642.7.6 Racionální Bézierova křivka . . . . . . . . . . . . . . . . . . . 652.8 Bézierova plocha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.9 Coonsova B-spline křivka . . . . . . . . . . . . . . . . . . . . . . . . . 682.9.1 Coonsův kubický B-spline . . . . . . . . . . . . . . . . . . . . 712.10 Coonsova B-spline plocha . . . . . . . . . . . . . . . . . . . . . . . . 712.11 NURBS křivky a plochy . . . . . . . . . . . . . . . . . . . . . . . . . 732.11.1 B-spline bázové funkce . . . . . . . . . . . . . . . . . . . . . . 742.11.2 Derivace B-spline bázových funkcí . . . . . . . . . . . . . . . . 782.11.3 Neracionální B-spline křivky . . . . . . . . . . . . . . . . . . . 802.11.4 Konvexní obal B-spline křivek . . . . . . . . . . . . . . . . . . 832.11.5 Plocha jako tenzorový součin dvou křivek . . . . . . . . . . . . 832.11.6 Neracionální B-spline plochy . . . . . . . . . . . . . . . . . . . 842.11.7 Racionální B-spline křivky (NURBS) . . . . . . . . . . . . . . 862.11.8 Racionální B-spline plochy (NURBS) . . . . . . . . . . . . . . 893 Modelování těles 993.1 Topologické prostory a topologická ekvivalence . . . . . . . . . . . . . 1003.2 Soubor simplexů . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013.3 Tělesa s hranicí 2-manifold v E 3 . . . . . . . . . . . . . . . . . . . . . 1033.4 Eulerova formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053.5 Regularizované booleovské operace . . . . . . . . . . . . . . . . . . . 1063.6 Reprezentace tělesa pomocí hranice . . . . . . . . . . . . . . . . . . . 1083.6.1 Implementace hraniční reprezentace . . . . . . . . . . . . . . . 1093.6.2 Eulerovy operátory . . . . . . . . . . . . . . . . . . . . . . . . 1113.6.3 Provádění booleovských operací . . . . . . . . . . . . . . . . . 1143.6.4 Zobrazení tělesa popsaného hraniční reprezentací . . . . . . . 1163.7 CSG reprezentace tělesa . . . . . . . . . . . . . . . . . . . . . . . . . 1163.7.1 Realizace CSG reprezentace . . . . . . . . . . . . . . . . . . . 1183.7.2 Provádění booleovských operací v reprezentaci CSG . . . . . . 1193.7.3 Určení vzájemné polohy bodu a CSG tělesa . . . . . . . . . . 1193.7.4 Zobrazení tělesa reprezentovaného pomocí CSG . . . . . . . . 120Literatura 122Rejstřík 123v


1Kapitola 1Afinní a projektivní prostoryPrůvodce studiemPo prostudování této kapitoly porozumíte vybraným částem z teorie afinních a projektivníchprostorů a transformací, a to v míře potřebné pro realizaci grafických systémů,pro které je tato teorie základním východiskem. Bez znalostí alespoň základů z tétooblasti byste v žádném případě nemohli grafické systémy konstruovat a mnohdy aniefektivně používat. Po prostudování kapitoly budete schopni realizovat jakoukoli afinnía projektivní transformaci. Zejména transformace, které v grafických systémech realizujírovnoběžná nebo perspektivní zobrazení, a také transformace modelovací, které sepoužívají při vytváření scény z jednotlivých objektů.Všechny jevy, které jsou zde prezentovány, byly vybrány velmi pečlivě na základětoho, že je jejich znalost při praktické realizaci systémů nevyhnutelná. Totéž plně platíi pro všechny zde uváděné řešené příklady, které jsou nedílnou součástí výkladu (častov nich naleznete důležité informace). Naopak všechny jevy, z nichž byste praktický užitekneměli, jsou potlačeny. Věřím proto, že překonáte případnou nedočkavost, nenecháte seodradit zdánlivé složitými matematickými vztahy a s chutí se do studia kapitoly pustíte.ZSJV1.1 Afinní prostor a afinní transformaceAfinní prostor a afinní transformace jsou základními pojmy, se kterými se lze přikonstrukci grafických systémů setkat. V této podkapitole se s nimi seznámíte. Přistudiu celého textu je pak budete téměř neustále potřebovat. Bylo by jistě možnézačít výklad přesnými definicemi. S ohledem na účel tohoto textu však od takovéhopostupu upustíme a spokojíme se s poněkud méně únavným (i když současněbohužel také poněkud méně přesným) úvodem vycházejícím z intuitivní představya zkušenosti.Intuitivně za afinní prostor považujeme prostor obsahující body. Navíc musí býtsoučasně dán (nebo zvolen) nějaký přidružený vektorový prostor (tzv. vektorové zaměření)a nějaké zobrazení, které ke každé dvojici z prostoru bodů přiřazuje nějakýprvek onoho přidruženého prostoru vektorového. Místo dalšího zpřesňování této in-


2 Afinní a projektivní prostoryformace se zde spokojíme s konstatováním, že konstrukce afinního prostoru sledujevelmi praktický cíl, a to, aby bylo možné body v afinním prostoru jednoznačně specifikovatpomocí souřadnic (tedy pomocí prvků ze zmíněného přidruženého prostoruvektorového) a aby k manipulacím s body bylo možné využívat prostředků lineárníalgebry. Za afinní prostor je nutné, přísně vzato, považovat nejen samotný prostorbodů, ale i onen zmíněný přidružený prostor vektorový a také zobrazení, které dvojicímbodů přiřazuje vektory. Dimenze přidruženého vektorového prostoru (který jevyužit k měření souřadnic) určuje také dimenzi afinního prostoru. Pro n-rozměrnýafinní prostor budeme používat označení A n . Nejčastěji budeme pracovat s afinnímiprostory trojrozměrnými. Řekněme, že v trojrozměrném afinním prostoru máme bodX. Jeho souřadnice vzhledem ke zvolené souřadné soustavě (přesněji je budeme nazývatafinními souřadnicemi) jsou popsány vektorem o třech prvcích x = (x 1 , x 2 ,x 3 ). Vektor x je prvkem zmíněného přidruženého vektorového prostoru.Afinní prostor, v němž je zaveden skalární součin a norma jako odmocnina zeskalárního součinu, se nazývá euklidovským prostorem. Pro euklidovský n-rozměrnýprostor budeme používat značení E n . Zavedení skalárního součinu a normy je důležité,protože umožňuje měřit délku vektorů a úhly mezi vektory (to určitě znátez matematiky). Nyní už asi shledáváte, že s euklidovskými a tedy i s afinními prostorymáte již vlastně bohaté zkušenosti, protože jste s nimi v minulosti nepochybněnejednou při řešení geometrických úloh pracovali. Možná jste jen nebyli zvyklí zdůrazňovat,o jaké prostory se jedná.Afinní transformace je zobrazení bodů jednoho afinního prostoru do jiného afinníhoprostoru. Speciálním případem je zobrazení bodů afinního prostoru do téhožafinního prostoru, které je bijekcí. Tento případ se nazývá afinitou. (Bijekce je zobrazení,kdy dvěma různým vzorům vždy odpovídají dva různé obrazy. Zde tak konkrétněvylučujeme, aby se dva různé body zobrazily na bod jediný). Velmi častobude předmětem našeho zájmu afinní transformace mezi dvěma afinními prostorydimenze 3, případně afinita na prostoru dimenze 3. K matematickému popisu afinnítransformace zavedeme následující vektory a matici (omezíme se zde na trojrozměrnéprostory)y = (y 1 , y 2 , y 3 ), x = (x 1 , x 2 , x 3 ), t = (t 1 , z 2 , z 3 ) ,Afinní transformaci lze pak popsat vztahem⎡⎤a 11 a 12 a 13A = ⎣a 21 a 22 a 23⎦ . (1.1)a 31 a 32 a 33y = xA + t . (1.2)Poznamenejme, že uvedený vztah je důsledkem toho, jak je afinní transformace definována(podkapitola 1.10). Pro naše potřeby je ale platnost vztahu (1.2) dostatečnouinformací. V uvedeném vztahu matice A a vektor t popisují vlastnosti transformace.


1.2 Změna souřadné soustavy 3Vektor y reprezentuje bod, který je afinním obrazem bodu, který je reprezentovánvektorem x. Jestliže přímo známe matici A a vektor t, pak lze transformaci podlepředpisu (1.2) již jednoduše provést. Někdy je ale situace komplikovanější v tomsmyslu, že je transformace zadána jinak než přímo hodnotami A, t. V takovémpřípadě je obvyklé, že se hodnoty A, t na základě zadání určí a pak se opět využijevztahu (1.2). Typickými postupy, které vedou k určení potřebných hodnot, sebudeme v dalším textu zabývat podrobněji.1.2 Změna souřadné soustavyVelmi častým případem afinní transformace mezi dvěma prostory stejné dimenzeje změna souřadné soustavy a odpovídající transformace souřadnic bodů. Opět sezde omezíme na afinní (případně euklidovské) prostory trojrozměrné, protože tybudeme dále potřebovat v převážné většině případů. Zobecnění závěrů zde uvedenýchpro prostory s libovolným počtem dimenzí je ale snadné (máte-li chuť, můžete seo zobecnění po přečtení textu pokusit, není to ale nezbytně nutné).V grafických systémech se změna souřadné soustavy provádí dosti často. Někdyse jedná o vnitřní záležitost systému (pro uživatele neviditelnou), kdy je změnasouřadné soustavy součástí nějakého výpočetního postupu nebo jeho odvození. Jindymůže být manipulace se souřadnou soustavou patrná i pro uživatele. Jako příkladlze uvést tzv. modelovací transformace, s jejichž pomocí uživatel systému vytváříscénu (může pomocí ní zadávat např. umístění objektů ve scéně, jejich velikost atd.).Po prostudování této podkapitoly budete umět transformace souřadných soustavrealizovat.Transformace souřadnic způsobená pouhým posunutím počátku souřadné soustavyje triviální. Nechť (p x , p y , p z ) jsou souřadnice nového počátku souřadné soustavy.Transformaci souřadnic z původní do nové souřadné soustavy pak popisujevztah (1.2), v němž A je jednotková matice a vektor t je t = (−p x , −p y , −p z ).Věnujme se nyní poněkud komplikovanějšímu případu. Počátek nyní při změněsouřadné soustavy ponecháme beze změny. Změníme ale osy soustavy. Předpokládejme,že původní souřadná soustava měla bázové vektory v 1 , v 2 , v 3 (bázové vektoryjsou vektory jednotkové délky udávající směry souřadných os). Bázové vektory novésouřadné soustavy jsou w 1 , w 2 , w 3 . Můžeme si myslet, že bázové vektory obou soustavvyjadřujeme vzhledem k nějaké další (už třetí) referenční souřadné soustavě.Řekněme, že máme bod X, který je v původní souřadné soustavě reprezentovánvektorem x = (x 1 , x 2 , x 3 ). Úkolem je zjistit souřadnice bodu X vzhledem k novésouřadné soustavě. Tyto souřadnice budou vyjádřeny vektorem, který označíme ˜x.Polohový vektor bodu X (vzhledem k oné myšlené třetí referenční souřadné soustavě)můžeme vyjádřit jako součet3∑︁x i v i . (1.3)i=1


4 Afinní a projektivní prostoryVyjádřeme bázové vektory v i souřadné soustavy původní pomocí bázových vektorůsouřadné soustavy nové. Nepochybně musí být možné vyjádřit vektor v i jakolineární kombinací vektorů w 1 , w 2 , w 3 (tvoří-li trojice w 1 , w 2 , w 3 bázi, pak lzekaždý vektor uvažovaného prostoru vyjádřit jako lineární kombinaci vektorů uvedenétrojice, tedy i každý z vektorů v i ). Máme protov i =3∑︁a ij w j . (1.4)j=1kde a ij jsou koeficienty lineární kombinace. Dosazením vztahu (1.4) do vztahu(1.3) a dostaneme3∑︁x i v i =i=13∑︁x ii=1 j=13∑︁a ij w j =3∑︁ 3∑︁x i a ij w ji=1 j=1= (x 1 a 11 + x 2 a 21 + x 3 a 31 )w 1+ (x 1 a 12 + x 2 a 22 + x 3 a 32 )w 2 (1.5)+ (x 1 a 13 + x 2 a 23 + x 3 a 33 )w 3 .Členy v závorkách v posledním ze vztahů (1.5) udávají souřadnice bodu X v novésouřadné soustavě. Uvažme, že podle našeho čekávání by měl transformaci popisovatmaticový vztah ˜x = xA (protože se počátek při změně soustavy nezměnil, je vevztahu (1.2) nutně t = 0). Zjišťujeme, že když položíme⎡⎤a 11 a 12 a 13A = ⎣a 21 a 22 a 23⎦ , (1.6)a 31 a 32 a 33bude součin ˜x = xA (jednotlivé složky vektoru ˜x) vyjadřovat členy v závorkáchv posledním ze vztahů (1.5), a tedy souřadnice bodu X v nové souřadné soustavě. Toje důležitý závěr. Vidíme, že prvky v i-tém řádku hledané matice A jsou souřadnicei-tého bázového vektoru původní souřadné soustavy vzhledem k souřadné soustavěnové (říká to vztah (1.4)). Tohoto závěru později mnohokrát využijeme v situaci,kdy bude zapotřebí matici A stanovit. Stojí za to zapamatovat si toto zjištění.1.3 Ortonormalita afinní transformaceMezi afinními transformacemi zaujímají významné místo transformace ortonormální.Ortonormální transformace jsou ty, při nichž zůstávají délky a úhly před a potransformaci nezměněny. Asi si vybavíte, že velmi obvyklé transformace posunutía pootočení jsou příklady transformací ortonormálních. Často se při řešení praktickýchúloh vyplatí vědět o existenci této třídy transformací. Předem obvykle víte,zda zamýšlená transformace je či není ortonormální. Je-li tomu tak, pak matice A


1.3 Ortonormalita afinní transformace 5musí mít jisté speciální vlastnosti. Této znalosti můžete využít jednak při stanovenímatice A a také při manipulaci s ní. Po přečtení této podkapitoly budete umětortonormality transformací využívat.Jak délky, tak úhly (které mají být při ortonormální transformaci zachovány)souvisí se skalárním součinem. Uvažujme vektory x, y. Zopakujme, že skalární součinvektorů x, y (značíme jej zde ⟨x,y⟩) zavádíme vztahem⟨x, y⟩ = xy ⊤ . (1.7)Připomeňme dále dobře známé vztahy pro délku (|x|) vektoru x a pro úhel (φ)dvou vektorů x, y. Víte, že platí|x| = √︀ ⟨x, x⟩ = √ xx ⊤ , (1.8)cos φ =⟨x, y⟩|x| |y| = xy⊤|x| |y| . (1.9)Je zřejmé, že jestliže transformace nemění hodnotu skalárního součinu, pak takéúhly a délky nejsou transformací změněny. Nechť x 1 , x 2 jsou vektory reprezentujícípočáteční a koncový bod vektoru x. Je tedy x = x 2 −x 1 . Afinní transformací(1.2) přejde vektor x ve vektor (x 2 A+t) − (x 1 A+t) = (x 2 −x 1 )A = xA. Při transformacivektoru se tedy translační složka transformace reprezentovaná vektorem tvůbec neuplatní (což jste ale asi intuitivně očekávali). Významná je naopak ta částtransformace, která je reprezentována maticí A. Podmínku zachování skalárníhosoučinu vyjádříme rovnicíOdtud pak plyne požadavek⟨x, x⟩ = ⟨xA, xA⟩ . (1.10)xx ⊤ = (xA) (xA) ⊤ = xAA ⊤ x ⊤ . (1.11)Z předchozího vztahu je již zřejmé, že afinní transformace bude zachovávat hodnotuskalárního součinu tehdy, jestliže bude splněna podmínka AA ⊤ = I, kde I je jednotkovámatice. Uvedená podmínka je nutnou a postačující podmínkou ortonormalitytransformace. Z definice inverzní matice máme A −1 A=I. Vidíme tedy, že dále musíplatitA −1 = A ⊤ . (1.12)Uvedené zjištění má praktický význam. Ukazuje, jak lze jednoduše vypočítat inverznímatici k matici ortonormální transformace. Inverzní matice se jednodušerovná matici transponované. Ukažme konečně ještě jednu vlastnost matice ortonormálnítransformace, a to, že její determinant musí být roven hodnotě ±1. Zdůvodnění


6 Afinní a projektivní prostorytohoto faktu není obtížné. Protože platí det(AA ⊤ ) = det(A) det(A ⊤ ) = det 2 (A),a protože det(I) = 1, musí být takédet 2 (A) = 1 . (1.13)☞Příklad 1.1. V tomto příkladě shrneme dosud získané poznatky o afinní transformaci.Příklad je záměrně volen tak jednoduchý, abyste mohli porovnat výsledekzískaný teoretickým řešením s výsledkem, který očekáváte. Uvažujte trojrozměrnýafinní prostor. Nová soustava souřadnic je pootočena vůči původní soustavě o úhelφ kolem osy z. Nalezněte převodní vztah pro přepočet souřadnic bodů z původnísouřadné soustavy do nové.Řešení. Se záměrem připravit se na řešení pozdějších úloh budeme postupovat takto:Bázové vektory nové soustavy označíme w 1 , w 2 , w 3 . Jejich souřadnice vyjádřímevzhledem k původní souřadné soustavě. (Často je tento postup příjemnější, než vyjadřovatsouřadnice bázových vektorů původní souřadné soustavy vzhledem k novésoustavě, jak bychom podle předcházející podkapitoly měli učinit.) Dostanemew 1 = (cos φ, sin φ, 0), w 2 = (− sin φ, cos φ, 0), w 3 = (0, 0, 1) .Na základě výsledku z podkapitoly 1.2 nyní již můžeme zapsat předpis, pomocíkterého je možné přepočítat souřadnice bodů z nové do původní souřadné soustavy(což je zatím ale naopak, než bylo požadováno v zadání). Máme⎡cos φ sin φ⎤0x old = x new A ⊤ , kde je A = ⎣− sin φ cos φ 0⎦ .0 0 1Z předchozího vztahu a s přihlédnutím ke skutečnosti, že rotace je ortonormálnítransformací (protože nemění délky ani úhly), snadno dostanemex new = x old A −1 = x old A ⊤ .☞Příklad 1.2. Stanovte matici A pro transformaci spočívající v rotaci souřadnésoustavy postupně kolem souřadných os x, y, z o úhly α, β, γ. (Rotace o úhel β semyslí okolo osy y soustavy, která vznikla dříve provedenou rotací původní soustavyo úhel α kolem její osy x. Analogicky se předpokládá, že před rotací okolo osy zo úhel γ byly již obě předchozí rotace kolem os x a y již provedeny.)Řešení. Při řešení budeme postupovat tak, že nejprve převedeme souřadnice ze souřadnésoustavy původní do souřadnic v souřadné soustavy pootočené kolem osy x,ty pak dále převedeme do souřadné soustavy pootočené kolem osy y a ty opět nakoneci do souřadné soustavy pootočené kolem osy z. Tuto posloupnost postupněprováděných transformací lze matematicky popsat vztahemx new = ((x old A x ) A y ) A z = x old A x A y A z .


1.4 Projektivní prostor, projektivní transformace 7Matice A x , A y , A z odpovídají rotaci kolem jednotlivých souřadných os. S ohledemna výsledek předchozího příkladu, v němž jsme odvodili předpis pro matici A ⊤ z , jemůžeme ihned zapsat. Máme⎡1 0 0A x = ⎣0 cos α − sin α0 sin α cos α⎤⎡⎦ , A y = ⎣cos β 0 sin β0 1 0− sin β 0 cos β⎤ ⎡cos γ − sin γ⎤0⎦ , A z = ⎣sin γ cos γ 0⎦ .0 0 1Příklad 1.3. Promyslete, kolik nezávislých hodnot obsahuje matice A afinní ortonormálnítransformace. Uvažujte trojrozměrný prostor.Řešení. Třebaže matice A obsahuje celkem 9 prvků, jsou v případě ortonormálnítransformace jen tři z nich nezávislé. Ostatní prvky je totiž možné dopočítat zevztahu AA ⊤ = I, který poskytuje šest rovnic pro šest zbývajících prvků. Situaci jižtaké ilustroval předchozí příklad. Rotace je ortonormální transformací. Nebylo protodivu, že k jejímu popisu stačily jen tři nezávislé hodnoty. V předchozím příkladě tobyly úhly α, β, γ.ShrnutíV tuto chvíli byste měli zejména znát, jak lze matematicky popsat afinní transformaci.Měli byste být schopni stanovit matici a vektor, které transformaci popisují.Měli byste vědět, co je ortonormální transformace a také byste měli umět těžit zespeciálních vlastností matice, která ji popisuje.1.4 Projektivní prostor, projektivní transformacePři použití afinních prostorů v grafických systémech lze v některých situacích narazitna jisté problémy. Významným problémem je například to, že není jednoduše možnépracovat s body v nekonečnu (s tzv. nevlastními body). I když jsou praktické scényzpravidla konečné, mohou nevlastní body vzniknout při zobrazování scén (např. přivelmi obvyklém středovém promítání na rovinnou průmětnu může průmět některýchbodů scény padnout do nekonečna). Problém spočívá v tom, že vektor reprezentujícínevlastní bod v afinním prostoru by měl mít jednu nebo více složek rovnýchhodnotě ±∞. Hodnotu ∞, jak víte, nelze ale v počítači jednoduše reprezentovat.Navíc by tato hodnota měla být i výsledkem aritmetických operací, což opět neníjednoduše možné. Uvedené potíže lze překonat zavedením projektivního prostoru.Projektivní transformace, která se nad projektivními prostory zavádí, je také obecnějšínež transformace afinní. Například: Zatímco pomocí afinní transformace lzerealizovat zobrazení pouze rovnoběžným promítáním, umožňuje projektivní transformaceprovádět promítání rovnoběžné i středové. V této podkapitole se projektivníprostor a projektivní transformaci naučíte používat.Zavedení projektivního prostoru a tzv. homogenních souřadnic, které v projektivnímprostoru jednotlivé body reprezentují, lze názorně vysvětlit ve dvojrozměrném☞


8 Afinní a projektivní prostorywy~x~(x,y)(x,y,1)(wx,wy,w)A 21 yOxObr. 1.1: Zavedení homogenních souřadnicpřípadě (obr. 1.1). Uvažujme dvojrozměrný afinní prostor A 2 a zaveďme nyní přidruženýtrojrozměrný prostor V 3 tak, že všechny body prostoru A 2 leží v roviněw = 1 tohoto přidruženého prostoru (obr. 1.1). Dvojrozměrný projektivní prostorP 2 zavádíme jako množinu směrů ve V 3 . Vysvětleme blíže smysl takového počínání.V afinním prostoru A 2 uvažujme bod, jehož afinní souřadnice jsou (x, y) (obr. 1.1).Homogenními souřadnicemi uvažovaného bodu, které jej reprezentují v právě zavedenémprostoru P 2 , je trojice (wx, wy, w), kde w je libovolné reálné číslo různé odnuly. V P 2 je tedy uvažovaný bod reprezentován nekonečným počtem vektorů přidruženéhovektorového prostoru V 3 , které jsou ovšem všechny navzájem kolineární.Speciálně můžeme také volit w = 1 (zvláštní význam této volby je patrný z obr. 1.1).Dostaneme tak trojici (x, y, 1). Je-li naopak trojice (x, y, w) homogenními souřadniceminějakého bodu, pak také trojice ( x , y , 1) je homogenními souřadnicemi téhožw wbodu a dvojice ( x , y ) jeho souřadnicemi afinními. Přechod od souřadnic (x, y, w)w wk souřadnicím ( x , y , 1) bývá nazýván normalizací.w wShrneme-li to, co bylo dříve uvedeno, můžeme říci, že v projektivním prostoruje každý bod reprezentován nějakým vektorem, který k bodu směřuje. Je při tomjedno, jak dlouhý vektor je. Nyní je již zřejmé, proč nebudou s body v nekonečnuv projektivních prostorech potíže. I ony totiž mohou být reprezentovány vektorykonečné délky. Uvažujme například bod ležící v obr. 1.1 v nekonečnu na souřadnicovéose ˜x. Tento bod může být reprezentován např. trojicí (1, 0, 0).Jestliže jsme se až doposud zabývali pouze dvojrozměrnými projektivními prostory,pak to bylo proto, že bylo snadné s pomocí obrázku ukázat zavedení takovéhoprostoru. Grafické systémy ale obvykle pracují s prostory trojrozměrnými. Vektorhomogenních souřadnic má v trojrozměrném projektivním prostoru čtyři složky. Jetypické, že poloha bodů ve scéně bývá uživatelem prvotně popsána pomocí souřadnicafinních. Řekněme, že (x, y, z) jsou afinní souřadnice bodu X ve scéně, kterýneleží v nekonečnu. Grafické systémy při své činnosti obvykle velmi brzy převádějí


1.4 Projektivní prostor, projektivní transformace 9souřadnice afinní na homogenní. Nejčastěji jednoduše tak, že jako homogenní souřadnicebodu berou čtveřici (x, y, z, 1). Tím je z nekonečně mnoha možných vektorůreprezentujících bod X v P 3 vybrán jediný, a to ten, pro který platí w = 1. Zobrazenístředovým promítáním se prakticky vždy řeší v homogenních souřadnicích.Před vykreslením výsledného obrazu (např. na obrazovku nebo do souboru) je alezapotřebí vrátit se k souřadnicím afinním. To se provádí (jak již víte) normalizací.Před provedením normalizace bývá provedeno ořezání výsledného obrazu do zvolenéhokonečného zorného objemu, takže obraz již neobsahuje nevlastní body, kteréby jinak při provádění normalizace vedly k dělení nulou. Také rovnoběžné promítánía modelovací transformace se v grafických systémech obvykle řeší s využitím homogenníchsouřadnic, a to přestože by to v tomto případě nebylo nezbytně nutné. Zdese jednoduše i pro řešení speciální úlohy využívá obecnějšího nástroje, protože jejsystém zpravidla stejně tak či tak již obsahuje.Příklad 1.4. Cílem tohoto příkladu je ukázat, že úlohy, které se čtenář ve středoškolskéa vysokoškolské matematice již naučil řešit v prostorech afinních, lze stejnědobře a jednoduše řešit také v prostorech projektivních. Uvažujme následující úlohu:Určete v P 2 rovnici přímky, která prochází body A, B o homogenních souřadnicích(x A , y A , w A ), (x B , y B , w B ). Řešte nejprve obecně, pak pro A = (0, 0, 1), B = (1, 0,1) a pro A = (1, 0, 1), B = (0, 1, 1).☞Řešení. Abychom co nejvíce ilustrovali příbuznost s již známými řešeními v afinnímprostoru, ukážeme dvě řešení zadané úlohy.1. Nechť (˜x, ˜y) jsou afinní souřadnice bodu. Uvažujme dobře známou rovnicipřímky ve tvaru a˜x + b˜y + c = 0, která platí pro souřadnice afinní. Nechť(x, y, w) jsou homogenní souřadnice téhož bodu. Víme, že afinní souřadnicelze získat normalizací. Máme ˜x = x/w, ˜y = y/w. Dosadíme-li hodnoty ˜x, ˜ydo dříve uvedené rovnice přímky, dostaneme po úpravě rovnici ve tvaru ax +by + cw = 0, která platí pro body zadané v homogenních souřadnicích. Předpokládejmena okamžik, že hodnoty a, b, c jsou známy. Násobíme-li rovnicireálným číslem λ≠0, pak dostaneme rovnici λax + λby + λcw = 0. Je zřejmé,že také rovnice ^ax + ^by + ^cz = 0, kde ^a = λa, ^b = λb, ^c = λc, je rovnicítéže přímky. Odtud vyplývá, že hodnoty a, b, c nebude možné jednoznačněstanovit pouze ze znalosti souřadnic bodů, jimiž přímka prochází. Bude zapotřebípoužít vhodné doplňující podmínky. (Na stejný problém bychom ovšemnarazili i při řešení v prostoru afinním.) Pro stanovení koeficientů a, b, c takmáme rovnice ax A + by A + cw A = 0, ax B + by B + cw B = 0. „Univerzální“doplňující podmínkou je např. podmínka ve tvaru a 2 + b 2 + c 2 = 1. Použitíuvedené podmínky ovšem bohužel vede na systém, který je nelineární. Tutopotíž lze obejít např. použitím podmínky a + b + c = 1 nebo podmínky a+ b + c = 0. Použije se ta varianta, pro níž má systém řešení. Uvedenýmpostupem získáme pro první a druhou dvojici zadaných bodů A, B rovnicepřímek ve tvaru x + y − w = 0, x − y = 0.


10 Afinní a projektivní prostorywXHB Hx'A HAXBy'x0yObr. 1.2: K rovnici přímky ve tvaru X = (1−λ)A + λB v homogenních souřadnicích2. Velmi jednoduše je možné rovnici přímky procházející body A, B zapsat vetvaru X = (1−λ)A + λB, kde λ je reálný parametr (−∞


1.4 Projektivní prostor, projektivní transformace 11Transformace popsaná uvedenou maticí provádí změnu měřítka na ose x. Můžete seo tom snadno přesvědčit, když transformaci maticí T aplikujete na bod o souřadnicích(x, y, z, 1). Dostanete (x, y, z, 1)T = (s x x, y, z, 1).Změna měřítka na všech osách⎡ ⎤1 0 0 0T = ⎢0 1 0 0⎥⎣0 0 1 0⎦0 0 0 1 sTransformace provádí změnu měřítka na všech souřadnicových osách, což je patrnéze vztahu (x, y, z, 1)T = (x, y, z, 1 ) → (sx, sy, sz, 1) (symbolem → jsme označilisoperaci normalizace homogenních souřadnic).Zkosení⎡ ⎤1 a 0 0T = ⎢0 1 0 0⎥⎣0 0 1 0⎦0 0 0 1Transformace, která je popsána touto maticí, bývá obvykle nazývána zkosením. Jeopět jednoduché se přesvědčit o oprávněnosti tohoto názvu. Provedením násobenídostáváme (x, y, z, 1)T = (x, y + ax, z, 1). Vidíme, že rovina y = const transformacípřejde v rovinu y = const + ax (tedy „zkosí se“; a je směrnice úhlu zkosení).Roviny x = const, z = const zůstanou uvedenou transformací nedotčeny. Maticepopisující transformaci, která by „zkosila“ také tyto roviny, lze snadno zkonstruovatanalogicky, což ponecháváme čtenáři jako drobné samostatné cvičení.Posunutí⎡ ⎤1 a 0 0T = ⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦p x 0 0 1Jak vyplývá ze vztahu (x, y, z, 1)T = (x + p x , y, z, 1), popisuje tato matice posunutíbodu o hodnotu p x ve směru souřadné osy x. Matice realizující translace ve směrusouřadných os y, z jsou triviální modifikací matice zde uvedené.Rotace⎡⎤c s 0 0T = ⎢−s c 0 0⎥⎣ 0 0 1 0⎦0 0 0 1Transformace popsaná uvedenou maticí je rotací kolem souřadnicové osy z. Symbolys, c značí hodnoty sinu, resp. kosinu úhlu rotace. Musí být s 2 + c 2 = 1. Provedením


12 Afinní a projektivní prostoryxXX''fx'X'πxSzObr. 1.3: K ověření činnosti matice středového promítánímaticového násobení dostáváme (x, y, z, 1)T = (xc−ys, xs+yc, z, 1). Matice realizujícírotaci kolem os x, y je možné zkonstruovat analogicky. Je užitečné, abyste se opětpokusili odpovídající matice zapsat.Středové promítání⎡⎤1 0 0 0T = ⎢0 1 0 0⎥⎣0 0 1 −1 ⎦f0 0 0 1Matice popisuje projekci ze středu o souřadnicích (0, 0, f ) na rovinu z = 0 (tedy narovinu xy). Ukážeme, jak je možné se o tom přesvědčit. Provedením transformacepro bod (x, y, z, 1) podle předpisu (1.14) máme(x, y, z, 1)T = (x, y, z,f − zff) → (f − z x,ff − z y,fz, 1) .f − zPorovnejme tento výsledek s tím, co od dané projekce intuitivně očekáváme. Řekněme,že má být promítnut bod X o afinních souřadnicích x, y, z (obr. 1.3). Jehoprůmět označme X’. Afinní souřadnice průmětu nechť jsou x’, y’, z’. Z podobnostitrojúhelníků (obr. 1.3) mámex= x′(f−z) fna obr. 1.3 je záporná). Odtud plyne x ′ =(vezměte v úvahu, že souřadnice z bodu Xxf . Podobně můžeme získat i souřad-(f−z)nici y ′ . Vyjde y ′ =yf . Souřadnici (f−z) z′ očekáváme z ′ = 0. Porovnáním uvedenýchhodnot s hodnotami získanými podle předpisu (1.14) zjišťujeme shodu u souřadnicx ′ , y ′ . V souřadnici z ′ zjišťujeme rozdíl. Zatímco intuitivně očekávaná hodnota jez ′ = 0, projektivní transformace dává hodnotu z ′ =zf . Výsledkem projektivní(f−z)transformace tedy není bod X’, ale bod X” (obr. 1.3). To ale nevadí. Spíše se jednáo přednost. K vykreslení průmětu (např. na obrazovku) se totiž použijí souřadnicex’, y’. Nenulová souřadnice z’ může být využita k řešení viditelnosti.


1.4 Projektivní prostor, projektivní transformace 13zAdxA'πyRovnoběžné promítáníObr. 1.4: K ověření činnosti matice rovnoběžného promítání⎡T = ⎢⎣⎤1 0 0 00 1 0 0⎥d z− dyd z1 0⎦0 0 0 1− dxMatice popisuje rovnoběžné promítání na rovinu xy. Směr promítacího paprsku jed = (d x , d y , d z ) (obr. 1.4). O správnosti matice se opět snadno přesvědčíme. NechťA je bod, který má být promítán, a nechť a = (a x , a y , a z ) je vektor jeho afinníchsouřadnic. Určíme polohový vektor a’ = (a’ x , a’ y , a’ z ) průmětu bodu A’. Rovnicepromítacího paprsku procházejícího bodem A je (t je parametr)x = a + td .Z podmínky a ′ z = 0 dostávámet = − a z.d zOdtud dále mámea ′ x = a x − a zd x , a ′ y = a y − a zd y .d z d zPorovnáním právě získaných výsledků s výsledky, které poskytuje transformace popsanámaticí T, zjišťujeme shodu v prvních dvou souřadnicích. Jednička na pozici3, 3 v matici T zajišťuje, že souřadnice z průmětu je stejná jako u původního bodu.To je opět výhodné pro následné řešení viditelnosti.Složitější transformace bývají běžně vytvářeny skládáním transformací jednodušších.Budeme se proto zabývat nyní i touto možností. Řekněme například, že jsmepostupně provedli dvě transformace. Nejprve transformaci popsanou maticí T 1 , paktransformaci T 2 . Nechť x je vektor souřadnic nějakého bodu před provedením oboutransformací. Přepočet souřadnic odpovídající první transformaci provedeme podlevztahu xT 1 . Skutečnost, že dále pak následovala ještě transformace T 2 , zohlednímevýpočtem podle vztahu (xT 1 )T 2 . Protože platí (xT 1 )T 2 = x(T 1 T 2 ), vidíme, že nauvedené dvě postupně prováděné transformace můžeme pohlížet jako na transformacijedinou, která je popsána maticí T 1 T 2 . Právě popsaný postup skládání transformacínásobením matic, které je popisují, lze pochopitelně zobecnit na libovolnýpočet dílčích transformací, jak ostatně v následujících příkladech velmi brzy uvidíte.


14 Afinní a projektivní prostoryZ předchozího přehledu základních transformací vyplývá, že projektivní transformaceje mocnější než transformace afinní. Afinní transformaci ze vztahu (1.2) lzerealizovat jako speciální případ transformace projektivní (1.14) a tvůrci systémů totak také velmi často dělají. Matice T má pak v takovém případě tvar (viz též vztah(1.2))[︂ ]︂ A 0T = ,t 1kde 0 je sloupcový vektor obsahující 3 nuly. Rozdíl mezi afinní a projektivní transformacílze slovně charakterizovat takto. Obě transformace jsou lineární. To znamená,že lineární objekty (přímky, roviny) jsou oběma transformacemi zobrazeny opětna objekty lineární. Na rozdíl od projektivní transformace zachovává transformaceafinní rovnoběžnost. Přímky nebo roviny, které jsou rovnoběžné před transformací,zůstanou rovnoběžné i po afinní transformaci.☞Příklad 1.5. Zapište matici T a projektivní transformace, která realizuje posunutíobjektu o vektor (x, y, z), a dále matici T b , která realizuje rotaci objektu kolem osyx o úhel α a pak ještě rotaci kolem osy y o úhel β.Řešení. Obě hledané matice snadno sestavíme s využitím předchozího přehledu,s využitím výsledku příkladu 1.2 a s uvážením, že, na rozdíl od příkladu 1.2, zdeprovádíme transformaci objektu a nikoli transformaci souřadné soustavy (obě variantyse navzájem liší znaménkem složek translace i úhlů rotace). Bude proto⎡ ⎤ ⎡⎤ ⎡⎤1 0 0 01 0 0 0 cos β 0 − sin β 0T a = ⎢0 1 0 0⎥⎣0 0 1 0⎦ , T b = ⎢0 cos α sin α 0⎥ ⎢ 0 1 0 0⎥⎣0 − sin α cos α 0⎦⎣sin β 0 cos β 0⎦ .x y z 10 0 0 1 0 0 0 1☞Příklad 1.6. Ukažte, že matice⎡ ⎤1 0 0 0T = ⎢0 1 0 0⎥⎣0 0 1 1 ⎦f0 0 0 0realizuje středové promítání ze středu (0, 0, 0) na rovinu z = f (obr. 1.5).Řešení. Snadno se o tom opět můžeme přesvědčit. Realizací transformace podlepředpisu (1.14) máme(︂(x, y, z, 1)T = x, y, z, z )︂ (︂ f→f z x, f )︂z y, f, 1 .


1.4 Projektivní prostor, projektivní transformace 15Xf( f < 0)SzX’xπObr. 1.5: K ověření činnosti matice středového promítání z příkladuHodnoty, které od uvedené projekce očekáváme intuicí, lze opět snadno odvoditpomocí obr. 1.5, podobně jako jsme to provedli u středového promítaní z předchozíhopřehledu. Tentokrát zjistíme shodu u všech tří souřadnic (x, y, z), což prokazujesprávnost dokazovaného tvrzení. Za povšimnutí stojí, že ke shodě nyní došlo i vetřetí souřadnici. Jak intuice, tak transformace popsaná maticí dávají shodně třetísouřadnici průmětu z = f. To ale činí uvedenou variantu poněkud méně praktickou,jestliže by měl následovat výpočet viditelnosti.Příklad 1.7. Ukažte, že matic realizujících nějakou jedinou konkrétní projektivnítransformaci je nekonečně mnoho.☞Řešení. Předpokládejme, že T je matice popisující uvažovanou transformaci. NechťX značí bod, který je transformací zobrazen na bod Y. Body X, Y nechť jsou reprezentoványtakovými vektory x, y svých homogenních souřadnic, že platí y = xT.Vezměme nyní libovolné reálné λ ≠ 0 a násobme jím uvedenou rovnici. Dostanemevztah λy = x (λT). Jestliže vektor y souřadnic reprezentoval bod Y (což jsme předpokládali),pak vektor λy reprezentuje bod Y také (víme totiž, že v projektivnímprostoru je každý bod reprezentován nekonečně mnoha kolineárními vektory). Shledávámetedy, že jestliže T byla matice realizující požadovanou projekci, pak lze tutéžprojekci realizovat i maticí λT.Příklad 1.8. Odhadněte, jakou transformaci realizuje matice⎡⎤1 0 0 −1fT = ⎢0 1 0 0⎥⎣0 0 1 0 ⎦ .0 0 0 1☞Řešení. Na základě předchozího přehledu lze snadno odhadnout, že se jedná o maticirealizující středové promítání na rovinu yz. Afinní souřadnice středu projekce jsou(f, 0, 0).


16 Afinní a projektivní prostoryπfnPObr. 1.6: Prvky zadávající promítáníShrnutí: V tuto chvíli byste měli zejména znát, jak lze matematicky popsat projektivnítransformaci. Měli byste být schopni stanovit matici popisující jednoduchétransformace nebo naopak rozhodnout, jakou transformaci zadaná (jednoduchá) maticeprovádí. Těchto znalostí využijeme v následujících příkladech, v nichž budemez jednoduchých transformací skládat transformace složitější, které již budou velmipraktické.1.5 Stanovení matice zobrazovací transformace –příklad AV tomto příkladě ukážeme postup, jak lze dříve uvedených základních transformacía jim odpovídajících matic využít při sestavení matice realizující poněkud komplikovanějšía prakticky již velmi užitečnou transformaci. Jedná se ve své podstatěo příklad, který je ale tak významný, že jej zařazujeme do textu jako samostatnoupodkapitolu (v následujících podkapitolách budou prezentovány ještě další podobnépříklady).Úkolem je nalézt matici realizující středové promítání. Promítání je dáno středemP = (p x , p y , p z ), normálou n zobrazovací roviny, n = (n x , n y , n z ), a ohniskovouvzdáleností f, tj. vzdáleností středu projekce od zobrazovací roviny (obr. 1.6). Předpokládáme,že délka vektoru n je |n|=1 (tento předpoklad zjednoduší vztahy, kterébudeme později odvozovat).Řešení. Hledanou transformaci rozdělíme na čtyři transformace dílčí. Cílem prvníchtří kroků bude provést takovou transformaci souřadnic, abychom obdrželi jeden zespeciálních případů projekce z předchozí podkapitoly, pro který již odpovídající maticiznáme. Provedeme následující:1. Počátek souřadné soustavy, kterou máme ve scéně zavedenu, posuneme dostředu projekce P.2. Provedeme rotaci této posunuté souřadné soustavy tak, aby její osa z’ splynulas normálou n zobrazovací roviny.


1.5 Stanovení matice zobrazovací transformace – příklad A 173. Posuneme počátek pootočené souřadné soustavy proti směru její osy z’ o délkuf tak, aby její počátek padl do zobrazovací roviny. (Po provedení dosud vyjmenovanýchtří kroků leží rovina xy souřadné soustavy v rovině projekce. Středprojekce leží na ose z soustavy, a to v její kladné části ve vzdálenosti f odpočátku.)4. Provedeme projekci (nyní se již jedná o speciální případ uvedený v přehledutransformací v předchozí podkapitole, kdy střed projekce leží na ose z a zobrazovacírovina je z = 0).Označíme-li matice uvedených transformací postupně jako T 1 , T 2 , T 3 , T 4 , pakhledaná výsledná matice T bude jejich součinem T = T 1 T 2 T 3 T 4 . S využitím výsledkůz předchozí podkapitoly můžeme ihned psát vztahy pro matice T 1 , T 3 , T 4 .MámeT 1 =⎡⎤1 0 0 0⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦ , T 3 =−p x −p y −p z 1⎡ ⎤ ⎡1 0 0 01 0 0 0⎢0 1 0 0⎥⎣0 0 1 0⎦ , T 4 = ⎢0 1 0 0⎣0 0 1 − 1 f0 0 f 10 0 0 1Ke stanovení zbývající matice rotace T 2 použijeme postupu popsaného v podkapitole1.2 a v příkladě 1.1. K tomu určíme souřadnice bázových vektorů souřadné soustavypo rotaci (nová souřadná soustava) vzhledem k souřadné soustavě platné předrotací (stará souřadná soustava). Bázové vektory staré souřadné soustavy označmex, y, z. Bázové vektory nové souřadné soustavy jsou x’, y’, z’. (Poznamenejme,že i když je souřadná soustava platná před rotací vůči původní soustavě ve scénějiž posunuta, jsou její bázové vektory x, y, z stále tytéž jako u původní souřadnésoustavy ve scéně.) Pro polohu souřadné soustavy po rotaci máme podmínku, abyosa z’ byla kolmá k zobrazovací rovině (aby tedy měla směr zadaného vektoru n).Podmínka však nespecifikuje polohu nové souřadné soustavy jednoznačně (soustavamůže zatím rotovat kolem své osy z’). Zvolíme proto další doplňující podmínku.Požadujeme, aby směr osy x’ soustavy po rotaci byl kolmý nejen k ose z’, ale takék ose z souřadné soustavy před rotací, tedy k vektoru z = (0, 0, 1). Předpokládámepři tom, že vektory n a z nejsou kolineární. Z uvedených podmínek mámez ′ = n ,x ′ = z × n|z × n| = (−n y, n x , 0)√︀ , n2x + n 2 y⎤⎥⎦ .y ′ = z ′ × x ′ = (n x , n y , n z ) × (−n y, n x , 0)√︀ n2x + n 2 y= (−n xn z , −n y n z , n 2 x + n 2 z)√︀ n2x + n 2 y.


18 Afinní a projektivní prostoryZavedeme-li x ′ = (x ′ x, x ′ y, x ′ z), y ′ = (y x, ′ y y, ′ y z), ′ z ′ = (z x, ′ z y, ′ z z), ′ pak s ohledem naortonormalitu vyšetřované transformace (podkapitola 1.3, příklad 1.1) máme⎡⎤x’ x y’ x z’ x 0T 2 = ⎢x’ y y’ y z’ y 0⎥⎣x’ z y’ z z’ z 0⎦ .0 0 0 1☞Příklad 1.9. Spusťte si program "úkol1_9.exe". Program předpokládá zadání zobrazenítak, jak bylo popsáno v této podkapitole, které čte ze souboru "úkol1_9.txt".Program počítá a vypisuje dílčí matice T 1 až T 4 a také výslednou transformačnímatici, která je jejich součinem. Na konkrétních hodnotách si tak můžete ověřit, zdajste vše správně pochopili. V případě potřeby můžete zadání modifikovat (jedná seo textový soubor).Shrnutí: V této poněkud kratší podkapitole jste se naučili konstruovat matici realizujícístředové promítání, a to na základě takových zadávacích prvků, které jsouv grafických systémech v praxi obvyklé. V následujícím textu budeme pokračovatdalšími (složitějšími) případy.1.6 Stanovení matice zobrazovací transformace –příklad BTaké tento příklad bude ještě věnován ukázce toho, jak lze složitější transformacisestavit z transformací elementárních. Opět sestavíme matici středového promítánína základě velmi praktického zadání. Je dáno následující (obr. ??, ??).VRP = (vrp x , vrp y , vrp z ) (View Reference Point, souřadnice ve WC),VPN = (vpn x , vpn y , vpn z ) (View Plane Normal, souřadnice ve WC),VUP = (vup x , vup y , vup z ) (View Up Vector, souřadnice ve WC),PRP = (prp x , prp y , prp z ) (Projection Reference Point souřadnice ve VRC),Window = (u min , u max , v min , v max ) (Zorné pole souřadnice ve VRC),F, B (Front, Back: přední a zadní ořezávací rovina; jedná se o dvě vzdálenosti vzhledemk VRC).WC (world coordinate system) je souřadná soustava, která je zavedena v zobrazovanéscéně. Výše uvedeným zadáním je dále definována souřadná soustava obrazuVRC (view reference coordinate system), která umožňuje specifikaci dalších zadávacíchprvků zobrazení. VRP je počátek souřadné soustavy VRC. Poloha počátkuVRP je zadána ve WC. Bodem VRP také prochází průmětna, která splývá s rovinouxy soustavy VRC. Poloha průmětny (a tedy také roviny xy soustavy VRC) jedodefinována svojí normálou VPN (view plane normal). Souřadnice vektoru VPN


1.6 Stanovení matice zobrazovací transformace – příklad B 19WCVPNVUPFrontu minVRCv minv maxVRPu maxPRPπBackObr. 1.7: Prvky zadávající uvažované středové promítáníVRPPRPFπBObr. 1.8: Prvky zadávající promítání - dvojrozměrné schéma; hodnoty F , B jsouvčetně znaménka; zde je F > 0, B < 0se zadávají v souřadné soustavě WC. Osa x souřadné soustavy VRC je kolmá jednakk vektoru VPN (který udává směr osy z soustavy VRC) a dále k vektoru VUP(view up vector). Vektor VUP je vektor, který se má na obrázku jevit svisle (kolmok ose x obrazu). Souřadnice vektoru VUP se zadávají ve WC. PRP (projectionreference point) je střed projekce. Poloha středu se zadává v souřadné soustavěVRC. Hodnoty u min , u max , v min , v max na osách x, y souřadné soustavy VRC definujív průmětně obdélník omezující obraz (jen obraz ležící uvnitř tohoto obdélníka budezískán). Uvedený obdélník spolu s bodem PRP definuje zorný jehlan. Zorný jehlan jedále omezen rovinami „front“ a „back“. Roviny jsou zadány svými vzdálenostmi F,B (opatřenými znaménkem) od průmětny (obr. 1.8). Zorný jehlan je tedy jehlanemkomolým (obr. 1.7). Pouze objekty (nebo jejich části) ležící uvnitř zorného jehlanubudou zobrazeny.Je možné, že se vám právě popsaný způsob zadání bude zpočátku zdát dosti komplikovaný.Časem jej ale určitě shledáte velmi logickým. Je pravděpodobné, že pokud


20 Afinní a projektivní prostorybyste sami měli vymyslet způsob zadání obecné projekce, vymysleli byste něco velmipodobného. Není také nezajímavé říci, že popsaný způsob zadání je využíván grafickýmstandardem PHIGS.Řešení. Hledanou transformaci sestavíme ze šesti elementárních transformací, jejichžtransformační matice již umíme zapsat. Všechny dále podrobně popíšeme.1. Posunutí počátku souřadné soustavy scény do VRP. Odpovídající matice mátvarT 1 =⎡⎤1 0 0 0⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦ .−vrp x −vrp y −vrp z 12. Natočení souřadné soustavy tak, aby osa z splynula s VPN. Vyjádříme bázovévektory x’, y’, z’ soustavy po natočení vzhledem k soustavě před natočením.Dostanemez ′ = (z ′ x, z ′ y, z ′ z) = VPN|VPN| ,x ′ = (x ′ x, x ′ y, x ′ z) =VUP × VPN|VUP × VPN| ,y ′ = (y ′ x, y ′ y, y ′ z) = z’ × x’ .Matice rotace pak má tvar⎡⎤x’ x y’ x z’ x 0T 2 = ⎢x’ y y’ y z’ y 0⎥⎣x’ z y’ z z’ z 0⎦ .0 0 0 13. Posunutí počátku souřadné soustavy z VRP do PRP. Matice popisující tutotransformaci má tvar (povšimněte si, že se při konstrukci matice hodí, že souřadnicestředu projekce PRP známe v soustavě VRC)T 3 =⎡⎤1 0 0 0⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦ .−prp x −prp y −prp z 14. Provedeme zkosení tak, aby zorný jehlan byl symetrický (obr. 1.9): Zaveďmebod CV (center of view – střed obrazu) a vektor DOP (direction of projection)takto (souřadnice CV a PRP zde měříme v soustavě VRC)


1.6 Stanovení matice zobrazovací transformace – příklad B 21u minPRPzxDOP CVu maxPRPzxCVDOPu minu maxObr. 1.9: K činnosti transformace popsané maticí T 4(︂umax + u minCV =, v )︂max + v min, 0 ,2 2DOP = (︀ dop x , dop y , dop z)︀= CV − PRP .Vektor DOP lze interpretovat také jako afinní souřadnice bodu CV v souřadnésoustavě mající počátek v bodě PRP (do tohoto bodu jsme počátek soustavypředchozími třemi transformačními kroky přemístili). Matice realizující požadovanézkosení má tvar⎡T 4 = ⎢⎣⎤1 0 0 00 1 0 0−dop y⎥1 0⎦ .dop z0 0 0 1−dop xdop zSprávnost matice T 4 můžeme snadno ověřit. Transformujme maticí T 4 vektor(dop x , dop y , dop z , 1) (tedy bod CV ). Dostaneme(dop x , dop y , dop z , 1)T 4 = (0, 0, dop z , 1) .Vidíme, že po transformaci bod CV (střed obrazu) leží na ose z. Zorný jehlanje tedy nyní symetrický vzhledem k souřadnicovým rovinám zx i yz.5. Transformujeme velikost zorného jehlanu tak, aby měl jednotkové rozměry(obr. 1.10). Požadujeme, aby jeho větší podstava ležela v rovině z = −1 a abydélka její strany byla 2 (od −1 do +1 v obou směrech). Jedná se o změnuměřítka, a proto bude mít matice realizující uvedenou transformaci tvar⎡⎤s x 0 0 0T 5 = ⎢ 0 s y 0 0⎥⎣ 0 0 s z 0⎦ .0 0 0 1


22 Afinní a projektivní prostoryFu minπBzPRPxdop z B(u max u min )dop z(má být 2)(dop z + B)u maxdop z + B(má být 1)Obr. 1.10: K činnosti transformace popsané maticí T 5Hodnoty s x , s y , s z stanovíme jednoduše na základě následujících skutečností:Vzdálenost mezi středem projekce a větší podstavou je nyní (dop z + B), alemá být -1 (poznamenejme, že dop z i B jsou obvykle záporné). Označme q x , q yrozměr větší podstavy jehlanu ve směru osy x, resp. y. Po transformaci majíbýt obě tyto šířky 2. Na základě podobnosti trojúhelníků máme (obr. 1.10)q x = u max − u mindop z(dop z + B), q y = v max − v mindop z(dop z + B) .Nyní již snadno určímes x =s y =s z =−1(dop z + B) ,2dop z(u max − u min )(dop z + B) ,2dop z(v max − v min )(dop z + B) .6. Nakonec provedeme projekci. Abychom usnadnili následující výpočty (zejménavýpočet viditelnosti metodou „z-buffer“), provedeme projekci tak, že scénutransformujeme (deformujeme) tak, aby rovnoběžné promítání dalo tentýž výsledekjako původně zamýšlené promítání středové (obr. 1.11). Místo středovéhopromítání pak použijeme promítání rovnoběžného s promítacím paprskemrovnoběžným s osou z, které lze realizovat velmi snadno. Uvedenátransformace transformuje zorný jehlan na hranol. Zaveďme hodnotuz f = s z (dop z + F) .


1.6 Stanovení matice zobrazovací transformace – příklad B 231BFπBz fPRPzxz fFz fπ1BzPRPxFz fπPRPzxs z F1+z fs z dop z+1Obr. 1.11: K činnosti transformace popsané maticí T 6 . Situace před transformací(obrázek vlevo). Transformace zorného jehlanu na kvádr (obrázek vpravo)Dále zaveďme matici⎡⎤1 0 0 00 1 0 0T 6 = ⎢1⎣0 0 ⎥⎦ .0 01+z f−1−z f1+z f0Snadno ověříme, že matice T 6 skutečně transformuje zorný jehlan na hranol.Můžeme to provést tak, že transformaci aplikujeme na některé význačné bodyzorného jehlanu. Např. (promyslete, které body jehlanu jsme transformovali):(︂z f(z f , z f , z f , 1)T 6 = z f , z f , − z )︂f, −z f → (−1, −1, 0, 1),1 + z f 1 + z f(1, 1, −1, 1)T 6 =(︂−11, 1, − z )︂f, 1 → (1, 1, −1, 1).1 + z f 1 + z fNechť x, ˜x značí vektory souřadnic bodu před a po provedení zobrazovací transformacezadané v tomto příkladě. V prvním případě se tedy jedná o souřadnice ve„světové“ souřadné soustavě scény, ve druhém případě o souřadnice v jednotkovémzobrazovacím hranolu, ke kterému jsme právě popsaným postupem dospěli. Platí˜x = xT 1 T 2 T 3 T 4 T 5 T 6 = xT , (1.15)kde je T = T 1 T 2 T 3 T 4 T 5 T 6 . Poznamenejme ještě, že transformace a matice T 1 , T 2 ,T 3 jsou ortonormální. Transformace T 4 , T 5 , T 6 nikoli.


24 Afinní a projektivní prostoryPříklad 1.10. Spusťte si program „úkol1_10.exe“. Program předpokládá zadánízobrazení tak, jak bylo popsáno v této podkapitole, které čte ze souboru s názvem„úkol1_10.txt“. Program počítá a vypisuje dílčí matice T 1 až T 6 a také výslednoutransformační matici, která je jejich součinem. Na konkrétních hodnotách si takmůžete ověřit, zda jste vše správně pochopili. V případě potřeby můžete zadánímodifikovat (jedná se o textový soubor).Shrnutí: Seznámili jste se s dalším příkladem, v němž byla matice zobrazovacítransformace sestavena z dílčích matic transformací elementárních. Postup popsanýv tomto příkladě je velmi praktický a bude vám současně sloužit jako návod prosestavení matice projekce v programu, který budete realizovat jako svoji samostatnoupráci. Ujistěte se proto, zda všem krokům dokonale rozumíte.☞1.7 Stanovení matice zobrazovací transformace –příklad CV tomto příkladě ukážeme, že velmi podobně, jako jsme v předchozím případě Brealizovali promítání středové, lze realizovat i promítání rovnoběžné. Promítání budeopět realizováno rovnicí (1.14). Drobné odchylky budou pouze ve stanovení maticeT. Provedeme následující: Prvky popsané v předchozím příkladě použijeme k zadánírovnoběžného promítání. Bod PRP spolu s bodem CV (viz. řešení příkladu B)v tomto případě určují směr promítacích paprsků. Význam ostatních prvků zůstávábeze změny. Stanovíme matici realizující takto zadané promítání.Řešení. Hledanou výslednou matici T opět stanovíme jako součin matic realizujícíchjednotlivé dílčí transformace. I v tomto případě budeT = T 1 T 2 T 3 T 4 T 5 T 6 .Dílčí transformace 1) až 4) zůstávají zcela beze změny jako v příkladě B a beze změnyzůstávají i jim odpovídající matice. Transformace 4) v tomto případě zajišťuje, abypromítací paprsky byly kolmé k průmětně (obr. 1.12). Transformace 5) převádí zornýkvádr na kvádr s jednotkovými rozměry. Jednotlivá měřítka v matici T 5 se nynístanoví takto (obr. 1.13)s x =2u max − u min, s y =2v max − v min,1s z = −dop z + B . (1.16)Transformace 6) zajišťuje, aby přední rovina jednotkového zobrazovacího hranoluležela v rovině z = 0 (až dosud ležela v rovině z = z f ) (obr. 1.14). Matice T 6 mátvar⎡⎤1 0 0 00 1 0 0T 6 = ⎢1⎣0 01+z f0⎥⎦ .0 0−z f1+z f1


1.7 Stanovení matice zobrazovací transformace – příklad C 25u minPRPzxVRPDOPCVπu maxzPRPxDOPu minCVπu maxObr. 1.12: K transformaci reprezentované maticí T 4Fu minπBPRPdop zBu max u min(má být 2)u maxdop z +B(má být 1)Obr. 1.13: K transformaci reprezentované maticí T 5Podobně jako v předchozím příkladě můžeme i nyní matici prověřit tak, že transformaciaplikujeme na některé významné body zorného kvádru. Snadno např. zjistíme,že je(1, 1, z f , 1) T 6 = (1, 1, 0, 1) a také (1, 1, −1, 1) T 6 = (1, 1, −1, 1) .Příklad 1.11. Sestavte matici realizující rovnoběžné promítání, které je zadánobodem P, kterým prochází průmětna, a normálou n průmětny.☞Řešení. Se znalostmi, které nyní již máte, by pro vás nalezení matice nemělo být problémem.Napovíme ale, že pomocí transformací popsaných maticemi T 1 , T 2 z příkladuA v podkapitole 1.5 lze požadovanou projekci převést na projekci paprskyrovnoběžnými s osou z souřadné soustavy.Shrnutí: Oba příklady (příklad B a C), které jste právě vyřešili, vám ukazují, žemezi realizací středového a rovnoběžného promítání není v grafických systémechzapotřebí činit žádných rozdílů. Oba případy lze realizovat vztahem (1.14) pro projektivnítransformaci a liší se navzájem jen v konkrétních hodnotách matice T.


26 Afinní a projektivní prostory11F π BF π BPRPzz f1PRPz11 1Obr. 1.14: K transformaci reprezentované maticí T 6Příklady nám také ukázaly, že postup stanovení matice T je si v obou případechvelmi podobný.1.8 Transformace na výstupní zařízeníPři studiu příkladů B, C v předcházejících podkapitolách jste se mohli podivit, pročse zobrazovací transformace prováděla tak, aby souřadnice objektů, které mají býtzobrazeny, padly do jednotkového zobrazovacího objemu. Mohli jste namítnout, žepři vykreslování získaného obrazu na nějaké výstupní zařízení nebude pravděpodobněmožné souřadnice z intervalu ⟨−1,1⟩ použít. Tyto pochybnosti byly na místě.Po zobrazovací transformaci do jednotkového zobrazovacího objemu totiž ještě následujetransformace na výstupní zařízení, kterou se v této podkapitole naučíte provádět.Ačkoli je závěrečná transformace na výstupní zařízení z teoretického pohledupouze jednoduchou afinní transformací, bývá často oddělena od předchozích transformačníchkroků. Důvody jsou následující:1. Předpokládá se, že může být více výstupních zařízení. Všechna pak mohoupoužít téhož výpočtu zobrazení, jen v závěrečné fázi, při transformaci na výstupnízařízení, se výpočet pro jednotlivá zařízení liší.2. Předpokládá se, že závěrečnou část zobrazení obsluha mění častěji než částipředchozí (např. prováděním výřezu atd.). V takovém případě se pak opakuje(pokud možno) pouze výpočet závěrečné části zobrazovací transformace, kterýje jednoduchý, a proto rychlý. Pro pořádek ještě dodejme, že z použití normalizovanéhozorného objemu vyplývají i jisté výhody při provádění ořezávání.Transformace na výstupní zařízení bývá zadána pomocí okna v normalizovanémzorném objemu. Toto okno říká, která část normalizovaného objemu se má zobrazit.(Poznamenejme, že v jednodušším případě lze zobrazit celý rozsah zorného objemu,okno pak není zapotřebí.) ViewPort naopak určuje oblast na výstupním zařízení,do které se má požadovaný obrázek umístit. Pro transformaci na výstupní zařízenítedy zpravidla známe následující hodnoty (obr. 1.15)


1.9 Inverze zobrazovací transformace – příklad D 271y1W x min1W y max0windowW y min1W x maxP y maxxP y minyxviewportP x minP x maxObr. 1.15: K transformaci na výstupní zařízeníW indow = (W x min , W y min , W x max , W y max ) ,W iewP ort = (P x min , P y min , P x max , P y max ) .Nechť x ′ , y ′ , z ′ jsou souřadnice na výstupním zařízení a ˜x, ˜y, ˜z souřadnice v normalizovanémzorném objemu. Pro transformaci souřadnic na výstupní zařízení pakna základě úměry jednoduše mámex ′ = P x min +y ′ = P y min +˜x − W x minW x max − W x min(P x max − P x min ) ,˜y − W y minW y max − W y min(P y max − P y min ) ,z ′ = ˜z .Poznamenejme, že souřadnici z’ potřebujeme, má-li být řešena viditelnost. Předpispro její výpočet může být stanoven s jistou volností. Musí však zůstat zachovánopořadí bodů a objektů, jak se jeví ve směru od pozorovatele. Výše uvedený jednoduchýpostup tomuto kritériu vyhovuje. Dále poznamenejme, že někdy je požadovánonastavit okno tak, aby byly zobrazeny všechny objekty scény. V takovém případěje pak nutné nejprve vypočítat zobrazovací transformaci pro všechny objekty a paknalézt extrémní hodnoty souřadnic x, y v normalizovaném zorném objemu, kterépak budou použity pro specifikaci okna.1.9 Inverze zobrazovací transformace – příklad DProvádět inverzní transformaci k transformaci zobrazovací je zapotřebí např. přivýpočtu Phongova stínování nebo při nanášení textury. V těchto případech je totižnutné pro daný bod na výstupním zařízení (pixel obrazu) zjistit polohu jeho vzoruve scéně (nebo jinak: je zapotřebí zjistit, který bod „skutečného světa“ se promítldo daného bodu obrazu). Detaily o použití této úlohy se lze dočíst [8]. Na tomto


28 Afinní a projektivní prostorymístě si pouze připravíme inverzní transformaci k transformaci, která je složena zezobrazovací transformace z podkapitoly 1.6 a z transformace na výstupní zařízenípodle předchozí podkapitoly 1.8.Řešení. Nechť x ′ , y ′ , z ′ jsou souřadnice na výstupním zařízení a ˜x, ˜y, ˜z souřadnicev normalizovaném zobrazovacím hranolu zavedeném v podkapitole 1.6. Inverzí vztahůz podkapitoly 1.8 snadno získáme˜x = W x min +˜y = W y min +x′ − P x minP x max − P x min(W x max − W x min ) ,y′ − P y minP y max − P y min(W y max − W y min ) ,˜z = z ′ .Nechť x je vektor souřadnic v souřadné soustavě scény. Inverzí předpisu pro zobrazovacítransformaci z příkladu v podkapitole 1.6 dostanemex = ˜xT −16 T −15 T −14 T −13 T −12 T −11 .Matice T 1 až T 6 byly již uvedeny v podkapitole 1.6. Inverzní matice mají tvar⎡⎤1 0 0 0T −11 = ⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦ ,vrp x vrp y vrp z 1T −12 = T ⊤ 2 ,⎡⎤1 0 0 0T −13 = ⎢ 0 1 0 0⎥⎣ 0 0 1 0⎦ ,prp x prp y prp z 1⎡⎤1 0 0 0T −14 = ⎢0 1 0 0⎣ dop x dop y⎥dop z dop z1 0⎦ ,0 0 0 1⎡ 1⎤s x0 0 01T −15 = ⎢0s y0 0⎥⎣10 0s z0⎦ ,0 0 0 1⎡⎤1 0 0 0T −10 1 0 06 = ⎢⎣0 0 0 − 1+z f ⎥z f⎦ .0 0 −1 − 1z f


1.10 Dodatky ke kapitole o afinních prostorech a afinních transformacích 29Poznamenejme, že ačkoli je uvedené matice možné získat „čistě mechanickou“ inverzípůvodních matic T 1 až T 6 , může být často pohodlnější zapsat je jako maticeprovádějící jednotlivé dílčí transformační kroky „v opačném směru“, než byl směrtransformací odpovídajících maticím původním. Například: Jestliže matice T 1 popisujeposunutí počátku souřadné soustavy scény do bodu VRP, bude matice T −11popisovat posunutí z bodu VRP zpět do původního počátku. Při praktické realizacigrafického systému byste samozřejmě také mohli invertovat až výslednou matici Tze vztahu (1.15). Použili byste k tomu obvyklých algoritmů pro výpočet inverznímatice, které určitě znáte z matematiky.Příklad 1.12. Stanovte inverzní transformaci k zobrazovací transformaci z příkladuC v podkapitole 1.7.☞Řešení. Využijeme výsledků z předchozího příkladu D. Všechny vztahy zůstávajív platnosti kromě matice T −16 . Zapište tuto matici. Shrnutí: Na tomto místě už byste měli vědět vše, co z teorie afinních a projektivníchprostorů a transformací budete ke konstrukci grafických systémů potřebovat. Víte,že větší systémy pracují velmi často tak, že nejprve provedou zobrazovací transformacido jednotkového zorného objemu tak, jak jsme to i my provedli v příkladechB nebo C. Pak následuje transformace na nějaké konkrétní výstupní zařízení, jakjsme ukázali v podkapitole 1.8. Víte, že grafické systémy zobrazování realizují jakoprojektivní transformaci podle vztahu (1.14). Umíte již také sestavit matici, kterápožadovanou projektivní transformaci realizuje. Víte, že je obvyklé sestavit požadovanoutransformaci z transformací dílčích. Matice výsledné hledané transformace jepak vypočtena jako součin matic, které popisují použité dílčí transformace.1.10 Dodatky ke kapitole o afinních prostorecha afinních transformacíchV této závěrečné podkapitole o afinních a projektivních prostorech a transformacíchuvedeme nakonec ještě slíbené definice, kterým jsme se v předchozím textu záměrněpokusili vyhnout. Podkapitola je určena zejména pro teoreticky zaměřené čtenáře,kteří by snad mohli zjednodušení v předchozím textu pociťovat rušivě. Je také současněale možné, že i pro ostatní by nyní mohlo být zajímavé vědět, jak jsou přesnědefinovány pojmy, s nimiž jsme v kapitole pracovali. Pokud ale takovou informacinepostrádáte, můžete podkapitolu přeskočit.


30 Afinní a projektivní prostoryDefinice 1.13. Afinní prostor : Neprázdnou množinu A n nazveme afinním prostoremdimenze n (prvky množiny A n budeme nazývat body), jestliže je dán vektorovýprostor V n dimenze n a zobrazení φ:A n ×A n → V n , které má následujícídvě vlastnosti:1. Pro každý bod A∈A n a pro každý vektor v∈V n existuje jediný bod B∈A ntak, že φ(A, B) = v.2. Pro každé tři body A, B, C ∈ A n platí, že φ(A, C) = φ(A, B) + φ(B, C).Přesně vzato je afinní prostor uspořádaná trojice (A n , V n , φ). Často se však používápouze stručného zápisu A n . Vektorový prostor V n bývá nazýván vektorovýmzaměřením afinního prostoru A n .Definice 1.14. Afinní zobrazení : Nechť A m , B n jsou dva afinní prostorydimenzí m, n a V m , W n nechť jsou jejich vektorová zaměření. Zobrazeníf :A m →B n nazveme afinním zobrazením, jestliže existuje takový lineární operátorA : V m → W n , že pro každý bod M ∈A m a pro každý vektor v∈V m platí, žef(M + v) = f(M) + A (v).Definice 1.15. Projektivní prostor : Nechť V n+1 je vektorový prostor dimenzen+1. Množinu všech směrů ve V n+1 nazveme projektivním prostorem dimenze n(a označíme ⟨V n+1 ⟩ nebo P n ).Definice 1.16. Homogenní souřadnice : Homogenními souřadnicemi v projektivnímprostoru P n nazveme uspořádanou (n+1)-tici, která určuje směr v prostoruV n+1 . Každá taková (n+1)-tice určuje jednoznačně nějaký bod v P n . Naopakkaždý bod může být reprezentován více (nekonečně mnoha) takovými (n+1)-ticemi.Nechť x∈V n+1 je vektor reprezentující bod X, pak také vektor λx, λ≠0∈R,reprezentuje X.Definice 1.17. Projektivní zobrazení : Nechť P n =⟨V n+1 ⟩, P’ n =⟨V’ n+1 ⟩ jsoudva projektivní prostory a nechť f je izomorfismus V n+1 na V’ n+1 . ZobrazeníF : P n → P ′ n je kolineací, jestliže pro každý bod X∈P n a pro každého vektorovéhozástupce x∈V n+1 tohoto bodu platí, že F(X) je bod reprezentovaný vektoremf (x).Nejsou-li vám definice úplně proti mysli, můžete se nyní např. zamyslet nad tím,proč je afinní prostor definován právě tak, jak jsme uvedli. Co by se stalo, kdybynebyly splněny ony dvě vlastnosti zobrazení φ, které definice požaduje?


31Kapitola 2Křivky a plochy v počítačovégraficePrůvodce studiemZSVTato kapitola se bude zabývat popisem a vývojem křivek a ploch používaných v počítačovégrafice. V první části se zaměříme na definování základních pojmů, rozdělenía popisu obecných vlastností křivek a následně i ploch. V druhé části se zaměříme najednotlivé konkrétní křivky a plochy, popíšeme si jejich princip a srovnáme výhody a nevýhody.JV dnešní době se setkáváme s potřebou křivek a ploch napříč různými obory.Neobejdeme se bez nich snad v žádném vědním oboru (matematika, fyzika, statistikaapod.) ani technické praxi (strojírenství, stavebnictví apod.). Podle potřeby různýchvědních oborů se také odlišují požadavky na chování a vlastnosti použitých křivek.S tím jsou také spojené různé představy o křivkách, kde třeba v případě fyziky sekřivka popisuje jako dráha hmotného bodu (částice) a vlastnosti se pak přirovnávajík rychlosti, zrychlení apod.Naším cílem je přiblížit čtenáři základní informace týkající se vývoje křiveka ploch používaných v počítačové grafice. Problém křivek a ploch je samozřejměvelmi rozsáhlý a stále se vyvíjející, naším cílem tedy bude shrnout nejdůležitější informacea demonstrovat vlastnosti vhodně vybraných zástupců křivek a ploch. Zajistéje možné si informace, které by byly nad rámec tohoto dokumentu, v případězájmu kdykoli rozšířit například dohledáním v některých z citovaných materiálů.Po základním úvodu a seznámení se s vlastnostmi křivek a ploch se postupně seznámítes křivkami polynomiálními, mezi které patří interpolaci obecným algebraickýmpolynomem, Hermitovou interpolaci a metodou nejmenších čtverců. Následněse budeme věnovat parametrickým křivkám jako je Fergusonova křivka, Bézierovakřivka, B-spline a NURBS křivky. Seznámíte se také se zástupci ploch, mezi kterépatří Bézierova plocha, B-spline plocha a NURBS plocha.


32 Křivky a plochy v počítačové grafice2.1 Křivka a její vlastnostiAčkoli se může zdát, že pojem „křivka“ je intuitivně jasný, ukázalo se, že najítdefinici matematicky přesnou a současně odpovídající tomu, co intuitivně chápemepod tímto pojmem, není vůbec snadné. Počátek křivek a ploch sahá hluboko do našíminulosti spojené s každodenní činnosti člověka (stavba přístřeší, dráha pohybujícíchse těles apod.). Jak již také bylo zmíněno v úvodu, různé obory přistupují k pojmukřivka různými způsoby (geometrická topologie, diferenciální geometrie ve fyzice,počítačová grafika apod.).V našem případě vyjdeme z následující definice křivky.Definice 2.1. Parametricky vyjádřenou (parametrizovanou) křivku α v R n nazývámediferencovatelné zobrazení φ : I → R n na intervalu I = ⟨a, b⟩ ⊆ R.Jedná se parametrické vyjádření křivky, kde zobrazení φ je n-tice spojitých reálnýchfunkcí, jedné proměnné, definovaných na intervalu ⟨a, b⟩.zkabtxObr. 2.1: Zobrazení φ : I → R 3 na intervalu IPřipomeňme, že funkce φ je diferencovatelná v bodě x ∈ I, pokud v bodě xexistuje diferenciál (má v bodě x derivace ve směru h ∈ R n pro všechny h).f ′ f(x + th) − f(x)(x; h) = lim. (2.1)t→0 tDerivace, jak se později ukáže, bude pro nás velmi důležitá a budeme pomocíní schopni jednoduše určit tečnu v libovolném bodě křivky, tečnou rovinu, křivostapod. Proto je diferencovatelnost důležitou podmínkou.Křivky dělíme na∙ Rovinná křivka je popsána spojitými funkcemi x, y : ⟨a, b⟩ → R 2 jako množinabodů p(t) = (x(t), y(t)), kde parametr t ∈ ⟨a, b⟩.y


2.1 Křivka a její vlastnosti 33∙ Prostorová křivka je popsána třemi spojitými funkcemi x, y, z : ⟨a, b⟩ → R 3jako množina bodů p(t) = (x(t), y(t), z(t)), kde t ∈ ⟨a, b⟩.Poznámka 2.2. Množina bodů {p(t), t ⊆ R} se nazývá obrazem křivky. Číslo tnazýváme parametr.Každému číslu t z intervalu I odpovídá na křivce p(t) příslušný bod P == [x(t), y(t), z(t)], jehož polohový vektor (vektor daný počátkem a příslušným koncovýmbodem, mající samozřejmě stejné souřadnice jako příslušný bod) p(t) je funkcíparametru t a bude dán vektorovou rovnicíp(t) = (x(t), y(t), z(t)) kde t ∈ I . (2.2)Poznámka 2.3. Pod pojmem bod (např. bod A = [4, 8, 1]) si můžeme představovati polohový vektor daného bodu, který získáme jako rozdíl bodové rovnice a počátkusouřadného systému. a = (4, 8, 1). Můžeme tedy podle potřeby popisovat bod oběmazpůsoby.Definice 2.4. Parametrická křivka zadána rovnicí p(t) je regulární, jestliže mánavíc nenulové první derivace pro všechny t ∈ I. Platí tedyp ′ (t) ≠ 0 pro všechna t ∈ I . (2.3)Řekneme, že pro křivku zadanou svou vektorovou rovnicí p(t) na intervalu I == ⟨a, b⟩, kde t ∈ ⟨a, b⟩, je bod p(a) (polohový vektor bodu) počátečním bodemkřivky. Bod p(b) je koncovým bodem křivky. Parametrickou křivku nazýváme uzavřenou,pokud je počáteční bod roven koncovému bodup(a) = p(b) . (2.4)Dodejme, že vektorovou rovnici křivky (2.2) lze také zapsat pomocí bodové rovniceP (t) = [x(t), y(t), z(t)] . (2.5)Poznámka 2.5. V našem případě, pokud nebude uvedeno jinak, budeme křivkupopisovat její vektorovou rovnicí p(t).Příklad 2.6. Zjistěte, zda se v případě křivky zadané vektorovou rovnicí p(t) == (t 2 , t 2 , 0), kde t ∈ (−∞, ∞) jedná o regulární křivku.Řešení. Jak je vidět ze zadání, jedná se o přímku v rovině z = 0. O regulární křivkuse jedná, pokud platí 2.3. V našem případě zkoumejme t = 0p ′ (0) = 2t + 2t + 0 = 0 .Pro zkoumané t = 0 vyjde výsledek rovnice 2.3 roven nule a nejedná se tedyo regulární křivku.☞


34 Křivky a plochy v počítačové graficeImplicitní a explicitní vyjádřeníMimo parametricky vyjádřené křivky existují také křivky zadané implicitněexplicitně. Pro explicitní vyjádření rovinné křivky platí, že dána jedna funkceneboy = f(x) , (2.6)která jsou definovány na společném intervalu I, na kterém mají také spojité své prvníderivace. Množinu všech bodů, které leží v prostoru R 3 a které lze zapsat ve tvaru(x, f(x), g(x)), nazýváme křivkou definovanou explicitně.☞Příklad 2.7. Je možné přejít od explicitního vyjádření k parametrickému v případěregulární křivky a opačně?Řešení. Můžeme jednoduše ukázat, že v případě regulární křivky lze stejnou explicitnírovnici zapsat jednoduše v parametrickém tvaru jakox = t, y = f(t), z = g(t), kde t ∈ I ,rovnice splňují předpoklady definice parametrické regulární křivky. Dokázali jsme,že regulární křivku zadanou explicitně lze převést na rovnici v parametrickém tvaru.Poznámka 2.8. Regulární křivku definovanou parametricky již ale nelze vždy převéstna rovnici v explicitním tvaru (příkladem takovéto křivky může být kružnice).Pro úplnost dodejme popis křivky i implicitně vyjádřené. Mějme množinu bodů{(x, y, z)}, určenou funkcemif(x, y, z) = 0, g(x, y, z) = 0 . (2.7)Křivka zadaná touto rovnicí je vlastně průnikem dvou ploch. Pokud je množinabodů neprázdná a hodnota následující matice[︃dfdx 1dgdx 1dfdx 2dgdx 2]︃dfdx 3dgdx 3, (2.8)má hodnost rovnu dvěma, nazýváme tuto množinu regulární křivkou definovanouimplicitně .Poznámka 2.9. Pokud máme křivku zadanou v explicitním tvaru, převedenímvšech proměnných a konstant na jednu stranu rovnice, dostaneme implicitní vyjádření.Obdobně lze implicitní vyjádření získat z parametrické rovnice pomocí eliminacíparametru.Křivky lze tedy podle jejich rovnic rozdělit na:


2.1 Křivka a její vlastnosti 351) Explicitní křivky y = f(x), kde x ∈ JPříklad: y = x 2 + x + 1, jedná se o parabolu.2) Implicitní křivky F (x, y) = 0.Příklad: (x+9) 2 +(y−2) 2 −4 = 0 kružnice se středem v bodě [−9, 2] a s poloměrem2.3) Parametrické křivky x = x(t), y = y(t), v případě prostoru z = z(t) kde parametrt ∈ ⟨a, b⟩.Příklad: x = t, y = t 2 , kde t ∈ R je parabola s vrcholem v počátku a poloměremr.Příklad 2.10. Definujte kružnici k se středem v počátku souřadné soustavy a poloměremr, ve všech typech výše popsaných rovnic.☞Řešení. Kružnic lze popsat jako∙ množinu bodů (x, y) ∈ R 2 : x 2 + y 2 − r 2 = 0 ,∙ graf funkce y = √ r 2 − x 2 ∪ y = − √ r 2 − x 2 ,∙ trajektorii bodu x(t) = r cos(t), y(t) = r sin(t), kde t ∈ ⟨0, 2π⟩.Jak lze již vidět z příkladu, mají různé typy vyjádření křivek různý význama s tím spojené své výhody i nevýhody. Obecně lze říci, že v případě počítačové <strong>grafiky</strong>je nejvhodnějším tvarem parametrická rovnice, se kterou se budeme v další částisetkávat nejvíce. To ale neznamená, že by se ostatní tvary nepoužívaly. Implicitnítvar má svůj význam například v případě výpočtu průsečíků křivek a ploch. Explicitníkřivky jsou zase nejjednodušší z hlediska konstrukce, kde je můžeme jednodušekonstruovat jako lomené čáry. Výhodou parametrických křivek je, že mají přirozenýmzpůsobem určen směr jejich procházení. Je snadné např. generovat posloupnostbodů pro jejich lineární aproximaci. Jejich specifickou vlastností je omezenost.Další typ dělení křivek může být podle zadání:∙ křivky dané analytickým předpisem (svým matematickým zápisem). Nejvhodnějšízadání, ať již jde o kterýkoliv z dříve uvedených způsobů. V praxi se všakobvykle s tímto zadáním nesetkáme a musíme výsledný analytický předpis vypočítat,abychom s křivkou mohli dále pracovat.∙ křivky dané jednotlivými body. Podle požadavků zadání pak obvykle řešímeinterpolační nebo aproximační křivkou (obecný algebraický polynom, metodanejmenších čtverců apod.). Příkladem může být průběh měření teploty.


36 Křivky a plochy v počítačové grafice∙ křivky určené pro modelování. V případě těchto křivek máme zadány řídícíbody (popřípadě další vlastnosti jako tečny). Hlavním cílem těchto ploch je,aby měly vhodné vlastnosti pro modelování a bylo je možné v rozumném časespočítat. Mezi tyto křivky patří dále popsané Bézierovy křivky, B-spline křivkynebo NURBS křivky.2.1.1 Parametrizace křivkyNěkdy může být vhodnější pro regulární křivku danou vektorovou rovnici přejítk jiné vektorové rovnici, která ale vyjadřuje tutéž křivku. Přechod mezi vektorovýmirovnicemi se nazývá transformace parametru.Definice 2.11. Nechť p(t), t ∈ I je křivka k třídy C n . Na intervalu J nechť jedefinovaná funkce s = f(t),která má na J nenulové první derivace a zobrazuje J nainterval I. Pro danou křivku p(s), s ∈ J byla provedena transformace parametru.Jinak řečeno, pokud jsou tedy křivky p(t), t ∈ I a p(s), s ∈ J dvě vyjádření téžekřivky, pak existuje transformace parametru s = f(t) tak, žep(t) = p(f(t)), t ∈ I . (2.9)☞Příklad 2.12. Pro danou křivku p(t) = (2t 2 , sin t), t ∈ (1, 4), transformujte vektorovourovnici na novou p(s), kde t = s 2 , s ∈ (1, 2).Řešení. Hledaná rovnice bude mít po dosazení tvarp(s) = (2s 4 , sin s 2 ), s ∈ (1, 2) .2.1.2 Tečný vektor, tečnaV každém bodě křivky můžeme určit tečný vektor, udávající aktuální směr pohybujícíhose hmotného bodu po křivce z počátečního do koncového bodu. Tečný vektorparametricky zadané křivky p(t) v daném bodě t = t 0 získáme jako vektorp ′ (t 0 ) = dpdt (t 0) = (x ′ (t 0 ), y ′ (t 0 ), z ′ (t 0 )) , (2.10)což znamená, že tečný vektor zadané křivky p(t) je určen derivacemi složek parametrickérovnice. Velikost vektoru |p ′ (t)| vypočteme jakoVektor|p ′ (t)| = √︀ (x ′ (t)) 2 + (y ′ (t)) 2 + (z ′ (t)) 2 . (2.11)t = p′ (t)|p ′ (t)| , (2.12)


2.1 Křivka a její vlastnosti 37nazýváme jednotkovým tečným vektorem parametricky zadané křivky p(t).Tečný vektor v bodě p(t 0 ) lze zapsat i jakop ′ p(t 0 + h) − p(t 0 )(t 0 ) = lim, (2.13)h→0 hkde je hledaný tečný vektor určený pevným bodem p(t 0 ) a bodem p(t 0 + h), kterýse přibližuje (hodnota h se zmenšuje) k tomuto pevnému bodu.Tečna křivky je limitní polohou sečny (přímka určená dvěma průsečíky s křivkou,pro kterou platí, že její dva průsečíky s křivkou splynou v jediný bod dotyku). Tečnukřivky lze vyjádřit pomocí zvoleného pevného bodu na křivce p(t 0 ) a tečného vektorup ′ (t 0 ) jakoT (u) = p(t 0 ) + up ′ (t 0 ), kde u ∈ R . (2.14)Tečna křivky je nezávislá na zvolené parametrizaci křivky. Vektor p ′ (t 0 ) se nazývásměrový vektor přímky.Regulární křivka má v každém bodě jedinou tečnu měnící se v závislosti na změněpolohy bodu na křivce. Pokud v daném bodě p(t 0 ) existuje jediná tečna, nazvemetento bod regulárním bodem. V případě neregulární křivky můžou existovat bodymající více tečen, těmto bodům se říká singulární body.Poznámka 2.13. Jak je patrné, že z parametrické rovnice lze lehce vyjádřit tečnývektor a tečnu. Toho budeme později využívat při řešení křivek, které se vytvářínapojováním jednotlivých segmentů (částí) na sebe.2.1.3 Oskulační rovinaKaždá rovina procházející tečnou regulární křivky se nazývá tečnou rovinou. Pevnýbod p(t 0 ) se nazývá dotykovém bodem tečny. Daným bodem prochází svazek tečnýchrovin. Obdobně jako v případě tečny je oskulační rovina limitní polohou tečnýchrovin. V bodě p(t 0 ) mějme tečnu T . Tečnou T a dalším bodem p(t 0 + h) proložímetečnou rovinu α. Oskulační rovina křivky τ v bodě p(t 0 ) je limitní případ tečnéroviny křivky, procházející dalším bodem p(t 0 + h), kde h → 0.Musí tedy platitp ′′ (t 0 ) = dp′dt (t p ′ (t 0 + h) − p ′ (t 0 )0) = lim. (2.15)h→0 hOskulační rovina je tedy rovnoběžná s vektory p ′ (t 0 ) a p ′′ (t 0 ). Platí, že jestližejsou oba vektory lineárně nezávislé, existuje právě jedna oskulační rovina v boděp(t 0 ). V opačném případě je oskulační rovinou každá tečná rovina.Definice 2.14. Mějme regulární křivku p = p(t), t ∈ I a pevný bod křivky p(t 0 ).Rovinu danou bodem p(t 0 ) a lineárně nezávislými vektory p ′ (t 0 ) a p ′′ (t 0 ) nazývámeoskulační rovinou τ v bodě p(t 0 ).O(u, v) = p(t 0 ) + up ′ (t 0 ) + vp ′′ (t 0 ), kde u, v ∈ R . (2.16)


38 Křivky a plochy v počítačové graficeBod křivky, v němž jsou p ′ (t 0 ) a p ′′ (t 0 ) kolineární (lineárně závislé), nazývámeinflexní bod.Přímku procházející bodem p(t 0 ) a kolmou na oskulační rovinu nazýváme binormáloua značíme ji b. Binormála je tedy kolmá na oba vektory p ′ (t 0 ) a p ′′ (t 0 ), kterédefinují oskulační rovinu τ. Jednotkový vektor binormály vypočteme na základěvektorového součinu obou vektorů jakob = p′ (t 0 ) × p ′′ (t 0 )|p ′ (t 0 ) × p ′′ (t 0 )| . (2.17)Pro úplnost dodejme, že vektorový součin dvou vektorů u = (u 1 , u 2 , u 3 ) a v == (v 1 , v 2 , v 3 ) je vektor kolmý na oba vektory u, v. Definován je jakou × v = ((u 2 v 3 − u 3 v 2 ), (u 3 v 1 − u 1 v 3 ), (u 1 v 2 − u 2 v 1 )) . (2.18)Normálou křivky v daném bodě p(t 0 ) rozumíme každou přímku kolmou na tečnu.Existuje však jedna normála ležící navíc v oskulační rovině τ, kterou nazýváme hlavnínormálou křivky a značíme ji n. Jednotkový vektor hlavní normály je kolmý na tečnývektor a binormálu v daném bodě p(t 0 ). Platí tedyPokud jsou vektory t a b jednotkové, stačí psátn = t × b|t × b| . (2.19)n = t × b . (2.20)Jak je již asi patrné, lze libovolný vektor vypočítat jako vektorový součin zbývajícíchdvou. Platí tedyn = t × b b = t × n t = n × b . (2.21)Rovina tvořená hlavní normálou n a binormálou b se nazývá normálovou rovinou(μ). Rovina tvořena tečnou t a binormálou b nazýváme rektifikační rovinoua značíme ρ.Poznámka 2.15. Křivka, která má v každém svém bodě nekonečný počet oskulačníchrovin (vektory p ′ (t 0 ) a p ′′ (t 0 ) jsou kolineární) je přímkou nebo částí přímky.V takovém případě se názvy hlavní normály a binormály nezavádějí.Oskulační, normálová a rektifikační rovina jsou navzájem kolmé roviny a tvoříFrenetův průvodní (doprovodný) trojhran křivky v bodě p(t 0 ) 2.2.


2.1 Křivka a její vlastnosti 39zbtyµnxObr. 2.2: Zobrazení Frenetova průvodního (doprovodného) trojhranu2.1.4 Křivost a torze křivkyKřivost křivky je jedna ze základních vlastností, které charakterizují jednotlivékřivky. U křivky rozlišujeme dva typy křivosti. První křivost (flexe) obvykle seoznačuje jen pojmem „křivost“ (ang. curvature) udává velikost odchýlení křivky odpřímky v daném bodě p(t 0 ). Čím bude mít křivka v daném bodě větší křivost, tímvíce se v okolí zkoumaného bodu liší od přímky.Výpočet křivosti křivky zadané vektorovou rovnicí p(t), t ∈ I podle obecnéhoparametru získáme jakok 1 (t) = |p′ (t) × p ′′ (t)||p ′ (t)| 3 . (2.22)Poznámka 2.16. V inflexních bodech je křivost nulová. Lze tedy na základě prvníkřivosti určovat inflexní body.Poznámka 2.17. Pokud má regulární křivka v každém svém bodě křivost rovnounule, bude tato křivka přímkou nebo částí přímky.Příklad 2.18. Určete křivost pro křivku p(t) = (t, t 2 , t 3 ).☞Řešení. Využijeme vzorce 2.22, kde


40 Křivky a plochy v počítačové graficep(t) = (t, t 2 , t 3 ) ,p ′ (t) = (1, 2t, 3t 2 ) ,|p ′ (t)| = √︀ (1 + 4t 2 + 9t 4 ) ,p ′′ (t) = (0, 2, 6t) ,p ′ (t) × p ′′ (t) = (6t 2 , −6t, 2) ,|p ′ (t) × p ′′ (t)| = √︀ (4 + 36t 2 + 36t 4 ) ,√︀(4 + 36t2 + 36tk 1 (t) =4 )√︀(1 + 4t2 + 9t 4 ) 3 .Výsledná křivost k 1 (t) =√(4+36t 2 +36t 4 )√(1+4t 2 +9t 4 ) 3 . Druhá křivost nazývaná torze (ang. torsion) je mírou pro odchýlení křivky p(t)v daném bodě p(t 0 ) z její oskulační roviny do prostoru. Vypočteme ji jakok 2 (t) = det(p′ (t), p ′′ (t), p ′′′ (t))|p ′ (t) × p ′′ (t)| 2 = (p′ (t) × p ′′ (t)) · p ′′′ (t)|p ′ (t) × p ′′ (t)| 2 . (2.23)Poznámka 2.19. Pokud má regulární křivka v každém svém bodě druhou křivostrovnou nule, bude tato křivka rovinnou křivkou.☞Příklad 2.20. Určete druhou křivost pro křivku p(t) = (t, t 2 , t 3 ) (křivka z předcházejícíhopříkladu 2.18).Řešení. Využijeme vzorce 2.23, kdep(t) = (t, t 2 , t 3 ) ,p ′ (t) = (1, 2t, 3t 2 ) ,p ′′ (t) = (0, 2, 6t) ,p ′′′ (t) = (0, 0, 6) ,p ′ (t) × p ′′ (t) = (6t 2 , −6t, 2) ,(p ′ (t) × p ′′ (t)) · p ′′′ (t) = 12 ,|p ′ (t) × p ′′ (t)| = √︀ (4 + 36t 2 + 36t 4 ) ,k 2 (t) =124 + 36t 2 + 36t . 4Výslednou druhou křivost (torzi) určíme jako k 2 (t) =124+36t 2 +36t 4 .V případě zájmů lze odvození vztahů křivosti 2.22 a 2.23 lze nalézt v [1, 2].


2.1 Křivka a její vlastnosti 41Pro případ rovinné křivky zadané explicitně y = f(x), lze vzorec pro prvníkřivost v bodě [x, y] zjednodušit nak 1 =|y ′′ |(1 + (y ′ ) 2 ) 3 2. (2.24)Příklad 2.21. Určete první křivost funkce y = √ 4 − x 2 (horní část kružnice x 2 ++ y 2 = 4) v bodě x 1 = 0 a x 2 = √ 2.☞Řešení. Využijeme vzorce 2.24 pro výpočet první křivosti. Budeme potřebovat prvníy ′ a druhou derivaci y ′′ .První derivace bude mít tvarDruhá derivace bude rovnay = √ 4 − x 2 .y ′ = 1 2 (4 − x)− 1 2 − 2x =y ′′ 4= − .(4 − x 2 ) 3 2Výslednou první křivost pro x = 0 vypočteme jako−x√4 − x2 .k 1 (0) =|y ′′ |(1 + (y ′ ) 2 ) 3 2=| − 4 |(4−x 2 ) 3 2(1 + ( −x √4−x 2) 2 ) 3 2=| − 4 |(4−0 2 ) 3 2(1 + ( −0 √4−0 2) 2 ) 3 2= 1 2 . (2.25)Výslednou první křivost pro x = √ 2 vypočteme jakok 1 ( √ 2) =|y ′′ |(1 + (y ′ ) 2 ) 3 2=| − 4 |(4−x 2 ) 3 2(1 + ( −x √4−x 2) 2 ) 3 2=4| −(4− √ |2 2 ) 3 2(1 + (− √ 2√4− √ 2 2 )2 ) 3 2= 1 2 . (2.26)Jelikož se jedná o kružnici bude první křivost pro všechny x i rovna 1 2 .2.1.5 Oskulační kružniceKružnice ležící v oskulační rovině bodu p(t 0 ), mající ve zkoumaném bodě křivkystejnou tečnu, se středem na hlavní normále n a poloměrem r⃒ r =1 ⃒⃒⃒⃒ ,k 1se nazývá oskulační kružnice. Jedná se o limitní případ kružnice, která se dotýkáv daném bodě křivky a má stejnou křivost jako křivka v tomto bodě.


42 Křivky a plochy v počítačové graficePříklad 2.22. Určete oskulační kružnici pro křivku v předcházejícím příkladě.Řešení. Protože je křivost konstantní a je rovna 1 2poloměr r = 2.bude mít oskulační kružnice☞r = 1 k 1= 2 (2.27)Poznámka 2.23. Jelikož se jedná o horní část kružnice, bude oskulační kružnicísama sobě.2.1.6 Parametrická a geometrická spojitostJednou z dalších vlastností křivek, zejména pak křivek navazovaných po obloucích,je jejich spojitost. Výsledná křivka má parametrickou spojitost nulté třídy (označujemeC 0 ), pokud je spojitá ve všech svých bodech (v případě navazování po obloucíchmusí platit, že koncový bod jednoho segmentu je totožný s počátečním bodem následujícíhosegmentu).Křivka má parametrickou spojitost prvního řádu (křivka je hladká) pokud má vevšech bodech spojité také své první derivace. Analogicky musí platit i pro spojitostivyšších řádů, že křivka má spojité i derivace daného řádu.Definice 2.24. Křivka má parametrickou spojitost třídy n (značíme C n ), pokudpro každý její bod existuje spojitá derivace až do stupně n.Mimo popsanou parametrickou spojitost se v praxi setkáváme ještě se spojitostígeometrickou, označujeme G n . Oproti parametrické spojitosti, kdy byla zaručenatotožnost tečných vektorů, je v případě geometrické spojitosti zaručena pouze totožnosttečen.Křivka α má geometrickou spojitost G 0 pokud koncový bod prvního segmentuje počátečním bodem druhého segmentu. V případě spojitosti G 1 (prvního řádu)musí být tečný vektor v koncovém bodě prvního segmentu lineárně závislý s tečnýmvektorem počátečního bodu druhého segmentu.Poznámka 2.25. Parametrická spojitost C n tedy zaručuje geometrickou spojitostG n (obráceně to samozřejmě neplatí). Zaručit geometrickou spojitost je jednodušší.2.1.7 Vlastnosti křivek v počítačové graficePři popisu konkrétních křivek budeme zkoumat některé další vlastnosti, jako:1. lokalita změn - změnou polohy řídícího bodu se změní pouze omezená částkřivky, nikoli celá křivka.


2.2 Plochy v počítačové grafice 432. počáteční a koncový bod - křivka může nebo nemusí procházet krajními (počátečníma koncovým) body svého řídícího polygonu.3. invariance k afinním transformacím - vlastnost zaručuje, že afinní transformace(1.2) a následné generování křivky bude mít stejný výsledek, jako transformacekaždého bodu z vygenerované křivky.4. vlastnost konvexní obálky (ang. convex hull property) - celá křivka (nebo částkřivky) leží v konvexní obálce řídícího polygonu.2.2 Plochy v počítačové graficeRozšířením křivek se dostaneme k plochám, které však mají s křivkami hodně společného,zejména u konkrétních ploch, které vznikly rozšiřením křivek (Bézierovaplocha, NURBS plocha apod.). Podobně jako u křivek si před popisem konkrétníchploch přiblížíme jejich základní definice a vlastnosti.Definice 2.26. Parametrickou plochou v R 3 nazýváme diferencovatelné zobrazeníθ : U → R 3 na podmnožině U ⊆ R 2 .vzαuyxObr. 2.3: Zobrazení parametrické plochyPlochu zadanou svou vektorovou rovnicí p(u, v) můžeme zapsat jakop(u, v) = (x(u, v), y(u, v), z(u, v)) , kde u, v ∈ I . (2.28)Analogicky jako křivky, můžeme rozdělit plochy podle vyjádření rovnice:1) Explicitní plochy z = f(x, y), kde x, y ∈ J.Příklad: z = 2x 3 − 2y 2 + x − 2y + 10.


44 Křivky a plochy v počítačové grafice2) Implicitní plochy F (x, y, z) = 0.Příklad: x 2 + y 2 + z 2 − r 2 = 0 je kulová plocha se středem v počátku a poloměrur.3) Parametrické plochy x = x(u, v), y = y(u, v), z = z(u, v) kde parametru, v ∈ ⟨a, b⟩.Příklad: x = r cos(u) cos(v), y = r sin(u) cos(v), z = r sin(v) kde 0 ≦ u < 2π,− π < v < π je kulová plocha se středem v počátku a poloměrem r.2 2Obdobně jako u křivek jsou jednotlivá vyjádření rozdílná a mají rozdílné výhodya nevýhody. Z parametrického vyjádření je snadné získat jednotlivé body, z implicitníhovyjádření zase můžeme jednoduše testovat, zda daný bod patří do plochy nebone. V našem případě se zaměříme na plochy parametrické, které jsou v počítačovégrafice nejvyužívanější.Dále lze plochy rozdělit podle toho, jak jsou zadané:∙ plochy zadané analytickým předpisem (výše popsané typy vyjádření).∙ plochy zadané hraničními křivkami∙ plochy zadané síti bodů (Bézierová plocha, NURBS, apod.)∙ plochy vytvářené kinematicky (rotační plochy, plochy vzniklé skládáním pohybu)2.2.1 Vlastnosti plochTečný vektor t u (u, v) (resp. t v (u, v)) ve směru parametru u (resp. ve směru v) k parametrickyzadané ploše p(u, v) určíme jako(︂ )︂∂∂p(u, v) ∂∂x(u, v) ∂∂y(u, v) ∂∂z(u, v)t u (u, v) = = , , , (2.29)∂∂u ∂∂u ∂∂u ∂∂uresp.(︂ )︂∂∂p(u, v) ∂∂x(u, v) ∂∂y(u, v) ∂∂z(u, v)t v (u, v) = = , , . (2.30)∂∂v ∂∂v ∂∂u ∂∂vPokud jsou vektory t u (u, v) a t v (u, v) nekolineární, nazýváme tento bod p(u, v)regulárním bodem zadané plochy.Rovina daná bodem p(u, v) a tečnými vektory t u (u, v), t v (u, v) se nazývá tečnourovinou plochy v bodě p(u, v). Tečnou rovinu můžeme zapsat jako vektorovou rovniciν(r, s) = p(u, v) + rt u (u, v) + st v (u, v), kde r, s ∈ R . (2.31)Normálu plochy v bodě p(u, v) určíme jako normálu tečné roviny. K jejímu určenívyužijeme vektorového součinu tečných vektorů t u (u, v) a t v (u, v). Jednotkovývektor normály plochy v bodě p(t) získáme jako


2.2 Plochy v počítačové grafice 452.2.2 u-křivky, v-křivkyn(u, v) = p u(u, v) × p v (u, v)|p u (u, v) × p v (u, v)| . (2.32)Nastavíme-li parametr u vektorové rovnice plochy p(u, v) jako konstantu u = u 0 == konst., dostaneme tzv. u-křivku plochyp(u 0 , v) = p(v) = (x(u 0 , v), y(u 0 , v), z(u 0 , v)) . (2.33)Analogicky pro parametr v = v 0 = konst., kde dostaneme tzv. v-křivku.p(u, v 0 ) = p(u) = (x(u, v 0 ), y(u, v 0 ), z(u, v 0 )) . (2.34)Mějme plochu zadanou vektorovou rovnicí p(u, v) = (x(u, v), y(u, v), z(u, v)),kde u, v ∈ ⟨0, 1⟩ jsou rohové body plochy dány p(0, 0), p(1, 0), p(0, 1), p(1, 1).Okrajové křivky plochy jsou u, v-křivky pro hodnoty parametru u = 0, 1 a parametruv = 0, 1. Tyto vlastnosti budou velmi důležité v případě navazování částí ploch nasebe a dodržení určité třídy parametrické nebo geometrické spojitosti (C n a G n ).2.2.3 Křivost plochyV porovnání s křivkami budeme u ploch rozlišovat více druhů křivosti, než jak tobylo u ploch. Je to dáno tím, že vybraným bodem regulární plochy může procházetlibovolný počet křivek. Jednotlivé křivosti vycházejí z normálové křivosti.Definice 2.27. V regulárním bodě plochy můžeme pro konkrétní tečnu a křivky,procházející tímto bodem a dotýkající se příslušné tečny, určit tzv. normálovoukřivost křivky v konkrétním bodě jakok n = k 1 (n k · n) = k 1 cos γ , (2.35)tedy jako první křivost křivky, vynásobená úhlem svírajícím normálou plochya hlavní normálou příslušné křivky. Všechny zkoumané křivky procházející tímtobodem, dotýkající se společné tečny, budou mít normálovou křivost stejnou.Jelikož však v tomto bodě je celá tečná rovina (a tím i nekonečně mnoho tečen),budeme rozlišovat limitní případy normálové křivosti, kterými bude minimálnínormálová křivost (k n,min ) a maximální normálová křivost (k n,max ).Gaussovou křivostí plochy v daném bodě pak rozumíme čísloStřední křivost plochy je dána jakok G = k n,min · k n,max . (2.36)k H = k n,min · k n,max2. (2.37)


46 Křivky a plochy v počítačové graficeAbsolutní křivost plochy je dána jakok abs = |k n,min | + |k n,max | . (2.38)Na základě křivosti plochy v daném bodě můžeme určit její přibližný tvar.Poznámka 2.28. Dvě plochy se dotýkají ve zkoumaném bodě tehdy, platí-li, žeobě plochy mají v daném bodě společnou tečnou rovinu. Bod se pak nazývá bodemdotyku. Pro společnou křivku platí, že jednotlivé body křivky jsou body dotykuobou ploch.2.3 Polynomiální křivkyZákladním prvkem teorie křivek v počítačové grafice jsou křivky polynomiální, kteréjsou popsány svým polynomemp n (t) = a 0 + a l t + ... + a n t n . (2.39)Stupeň polynomu je určen nejvyšší mocninou n. Nejčastěji používaným stupněmjsou křivky třetího stupně - kubické polynomyp 3 (t) = a 0 + a l t + a 2 t 2 + a 3 t 3 , (2.40)které poskytují dostatečné možností při volbě tvarů a nemají nevýhody křivek vyššíhostupně, jakými jsou nežádoucí vlnění a oscilace.Obecně lze křivky rozdělit podle procházení křivky zadanými body. Křivka můžezadanými body procházet přesně nebo pouze v minimální blízkosti těchto bodů.Podle průchodu je dělíme na1) Interpolační křivky - prochází zadanými body přesně (obr. 2.4 vlevo).2) Aproximační křivky - prochází pouze v blízkosti zadaných bodů (obr. 2.4 vpravo).I když bychom mohli říci, že obvykle chceme, aby výsledná křivka byla interpolační,existují případy, kdy je již ze zadání patrné, že interpolační křivka neexistujea nezbývá než použít křivku aproximační. Blíže se dočteme v části o aproximačnímetodě nejmenších čtverců.2.3.1 Interpolace algebraickým polynomemMezi základní interpolační křivky patří interpolace algebraickým polynomem. Cílemje nalézt analytickou křivku, která prochází opěrnými body [x 0 , y 0 ], [x 1 , y 1 ], . . . , [x n , y n ].Nalezením této křivky můžeme následně jednoduše určit hodnoty ve všech bodech,ve kterých není křivka zadána svými opěrnými body.


2.3 Polynomiální křivky 47yyxxObr. 2.4: Ukázka a) interpolační křivky, b) aproximační křivkyDefinice 2.29. Mějme zadáno n + 1 bodů (x 0 , y 0 ), (x 1 , y 1 ), ..., (x n , y n ), pro kteréplatí x 0 < x 1 < x 2 < ..... < x n , pak existuje právě jeden interpolační polynomp n (x) stupně n nebo menšího.To znamená, že platí:p n (x i ) = y i , i = 0, ...., n . (2.41)Příklad 2.30. Určete výsledný interpolační polynom pro body [0, 0], [1, 2], [3, 3].Řešení. Námi hledaný polynom bude podle výše uvedené definice 2.29 stupně dvanebo méně. Bude tedy tvaru: p 2 (x) = a 0 x 2 + a 1 x + a 2Po dosazení dostaneme soustavu:☞a 2 = 0a 0 + a 1 + a 2 = 29a 0 + 3a 1 + a 2 = 3Výpočet vede na řešení soustavy lineárních rovnic, jejímž řešením je interpolačnípolynom ve tvaru p (x) = −0.5x 2 + 2.5xStupeň křivky tedy závisí na počtu zadaných bodů:∙ pro dva body bude výsledkem lineární interpolace (přímka),∙ pro tři body bude výsledkem kvadratická interpolace (parabola nebo kružnice),∙ pro čtyři body bude výsledkem kubická interpolace (kubika),∙ pro pět a více bodů bude výsledkem interpolace obecně polynomem n-téhostupně.


48 Křivky a plochy v počítačové graficeVšimněte si, že snahou je získat polynom co nejmenšího stupně. Jak je to s polynomyvyšších stupňů si lze lehce představit na jednoduchém zadání dvou bodů.Z definice víme, že existuje právě jeden polynom prvního stupně, tedy přímka, kteráprochází oběma body. V případě vyššího polynomu, např. paraboly je již asi jasné,že existenci jediného řešení bychom podle definice dostali přidáním dalšího bodu. Jetedy patrné, že polynomů vyššího stupně existuje nejen v tomto případě nekonečněmnoho a byly by závislé na volbě příslušného chybějícího bodu.Velmi často se pro výpočet interpolačního polynomu používá maticový zápis, kdepro výpočet interpolačního polynomu n-tého stupně, využijeme následující matici.⎡⎤ ⎡ ⎤ ⎡ ⎤1 x 0 x 2 1 . . . x n 1 a 0 y 0⎢1 x 1 x 2 2 . . . x n 2 ⎥ ⎢a 1⎥⎣1 . . . . . . . . . . . . ⎦ ⎣. . . ⎦ = ⎢ y 1⎥⎣. . . ⎦ . (2.42)1 x n x 2 n . . . x n n a n y nPředcházející případ by tedy bylo možné zapsat pomoci maticového tvaru jako⎡ ⎤ ⎡ ⎤ ⎡ ⎤1 0 0 a 0 0⎣1 1 1⎦⎣a 1⎦ = ⎣2⎦ .1 3 9 a 2 3Vyřešením rozšířené matice soustavy dostaneme opět tvar p(x) = −0.5x 2 +2.5x.Všimněte si prosím části definice určující stupeň polynomu, konkrétně částistupně nejvýše n-1. Důležitost slůvka „nejvýše“ opět demonstrujeme na příkladu,kdy máme tři body, splňující podmínku x 0 < x 1 < x 2 , z definice víme, že hledanýpolynom bude nejvýše druhého stupně. Nejvýše proto, že ve speciálním případě,kdy budou všechny tři zadané body ležet na přímce, bude výsledný polynom prvníhostupně, tedy přímo ta přímka, na které všechny body leží. Obdobně by to byloi v ostatních případech. Hledaný polynom může tedy být ve speciálních případechi nižšího stupně.Zobecněním algebraického polynomu můžeme odvodit tzv. Lagrangeův tvar interpolačníhopolynomu, který umožňuje získat funkční hodnotu v libovolnémbodě dosazením do následující rovnice.p n (x) =n∑︁i=0y iφ i (x)φ i (x i ) =n∑︁y i ·i=0n∏︁j = 0i ≠ jx − x jx i − x j(2.43)☞Příklad 2.31. Určete výsledný Lagrangeův interpolační polynom pro body P 0 == [0, 0], P 1 = [1, 2], P 2 = [3, 3].Řešení. Po dosazení do rovnice 2.43 bude platit pro n = 2.


2.3 Polynomiální křivky 49(x − x 1 )(x − x 2 )p 2 (x) = y 0(x 0 − x 1 )(x 0 − x 2 ) + y (x − x 0 )(x − x 2 )1(x 1 − x 0 )(x 1 − x 2 ) + y (x − x 0 )(x − x 1 )2(x 2 − x 0 )(x 2 − x 1 ) .Po dosazení:(x − 1)(x − 3) x(x − 3) x(x − 1)0 + 2 + 33−2 6= −x 2 + 3x + 1 2 x2 − 1 2 x = −0.5x2 + 2.5xVýsledný polynom má tvar p(x) = −0.5x 2 + 2.5x.Mezi nevýhody polynomiální interpolace patří změna celého výsledného polynomu(celé křivky), při změně kteréhokoli ze zadaných opěrných bodů.Další nevýhoda spočívá v nepřirozeném vlnění již u relativně nízkého stupněpolynomu. Křivka se rozkmitá (osciluje). Proto se obvykle používá polynomiálníinterpolace pro křivky stupně maximálně pět a nejčastěji stupně tři (kubika).2.3.2 Interpolace po částechV případě potřeby interpolace křivky s vyšším počtem bodů se mnohem častěji používátechnika interpolace křivky po jejích částech. Ta spočívá v tom, že celou křivkunahradíme několika částmi, které interpolují jednotlivé úseky. Celou křivku tak můžemenapříklad aproximovat vždy pro každé čtyři body polynomem třetího stupně.Problém, který zde však vzniká, spočívá v navazování křivek v jednotlivých bodech,kde končí jedna část křivky a začíná druhá. Snahou je samozřejmě zaručit alespoňurčitou spojitost C n popřípadě G n . Příkladem může být interpolace Hermitovskýmipolynomy nebo Fergusonovými kubikami.2.3.3 Hermitův interpolační polynomJednou z nevýhod interpolace obecným algebraickým polynomem je, že v případěvyšších polynomů, se může křivka rozkmitat (mezi zadanými body nabývá vysokýchhodnot). Jednou z možností je zadat do každého uzlového bodu derivaci v tomtobodě. Tím je křivka a její tvar ovlivněn nejen svými funkčními hodnotami, ale i jejichderivacemiDefinice 2.32. Mějme zadáno n + 1 opěrných bodů [x 0 , y 0 ], [x 1 , y 1 ], ..., [x n , y n ]a hodnoty derivací v jednotlivých bodech y ′ 0, y ′ 1, ..., y ′ n, pak existuje právě jedeninterpolační polynom p 2n+1 (x) stupně 2n + 1 nebo menšího, pro který platíp n (x i ) = y i a p ′ n(x i ) = y ′ i ,kde i = 0, ...., n. (2.44)Získáme soustavu rovnic, kde polovinu rovnic získáme dosazením bodů do


50 Křivky a plochy v počítačové graficea druhou polovinu rovnic dosazením dop n (x i ) = y ip ′ n(x i ) = y ′ i .☞Příklad 2.33. Určete výsledný interpolační polynom pro body P 0 = [0, 1], P 1 == [1, 0], P 2 = [3, 16] a jejich derivace y ′ 0 = −1, y ′ 1 = −4, y ′ 2 = 92.Řešení. Námi hledaný polynom bude podle výše uvedené definice 2.32 stupně dvanebo méně. Výsledný polynom tedy bude tvaru p 5 (x) = a 0 x 5 + a 1 x 4 + a 2 x 3 + a 3 x 2 ++ a 4 x + a 5 .Po dosazení zadaných bodů dostaneme :1 =a 0 0 5 + a 1 0 4 + a 2 0 3 + a 3 0 2 + a 4 0 + a 50 =a 0 1 5 + a 1 1 4 + a 2 1 3 + a 3 1 2 + a 4 1 + a 516 =a 0 3 5 + a 1 3 4 + a 2 3 3 + a 3 3 2 + a 4 3 + a 5Zbývající tři rovnice dostaneme po derivování polynomu, kdePo dosazeníp ′ 5(x) = 5a 0 x 4 + 4a 1 x 3 + 3a 2 x 2 + 2a 3 x + a 4 .−1 =5a 0 0 4 + 4a 1 0 3 + 3a 2 0 2 + 2a 3 0 + a 4−4 =5a 0 1 4 + 4a 1 1 3 + 3a 2 1 2 + 2a 3 1 + a 492 =5a 0 3 4 + 4a 1 3 3 + 3a 2 3 2 + 2a 3 3 + a 4Výpočet tedy vede na řešení soustavy lineárních rovnic, jejímž řešením je Hermitůvinterpolační polynom ve tvaru p(x) = x 5 − 3x 4 + 2x 2 − x + 1Jak jsme již dříve naznačili, v praxi se v některých případech nahrazuje polynomaproximací polynomy menšího stupně. V tomto případě si ukážeme na předcházejícímpřípadě rozdělení křivky na dvě části. Budeme tedy mít místo jednohovýsledného polynomu stupně pět, dva polynomy stupně tři.☞Příklad 2.34. Určete výsledné po částech interpolační polynomy třetího stupně probody P 0 = [0, 1], P 1 = [1, 0], P 2 = [3, 16] a jejich derivace y ′ 0 = −1, y ′ 1 = −4, y ′ 2 = 92.Řešení. V našem případě dojde k rozdělení zadání na dvě části a první polynomvznikne pro body P 0 , P 1 a druhá část bude pro body P 1 , P 2 . Podle 2.32 budoupolynomy stupně tři. Výsledný polynom tedy bude tvaru p 3 (x) = a 0 x 3 + a 1 x 2 ++ a 2 x + a 3 a derivovaná část p ′ 3(x) = 3a 0 x 2 + 2a 1 x + a 2 .Po dosazení a vyřešení soustavy lineárních rovnic dostaneme dva polynomy p a (x) == −3x 3 + 3x 2 − x + 1 a p b (x) = 18x 3 − 84x 2 − 10x + 16


2.4 Metoda nejmenších čtverců 51Je třeba poznamenat, že aproximováním našeho zadání dvěma polynomy třetíhostupně jsme získali odlišné řešení, než v předchozím případě. Mezi výhody však patříto, že v případě po částech interpolačního polynomu výsledná křivka také procházívšemi opěrnými body, v případě napojovaného bodu má spojité derivace prvníhořádu (parametrická spojitost C 1 ) a jedná se tedy o křivku hladkou. Prakticky jsmezískali kubickou spline křivku se spojitosti třídy C 1 .2.4 Metoda nejmenších čtvercůMimo interpolační polynomiální křivky, které prochází všemi zadanými body, existujíi polynomiální křivky aproximační. Mezi jednu ze základních patří metodanejmenších čtverců. Jedná se o matematicko-statistickou metodu sloužící k eliminacichyb. Poprvé tuto metodu použil matematik a fyzik Carl Friedrich Gauss v roce1795.Funkčnost metody spočívá v tom, že se snažíme nalézt takové řešení, aby součetdruhých mocnin chyb byl minimální. Příkladem můžou být zadané jednotlivé bodyP 0 , P 1 , . . . P n a naším cílem je proložení těchto bodů polynomem prvního stupně(přímkou). Jak je asi patrné, tři a více obecných bodů proložit přímkou nelze (mimospeciální případ, kdy by všechny body, už ze zadání, ležely na přímce).Poznámka 2.35. Připomeňte si definici 2.29, určující stupeň polynomu pro hledanoukřivku.Představme si, že polynom k-tého stupně, kterým chceme aproximovat zadanébody (x 0 , y 0 ), (x 1 , y 1 ), . . . , (x n , y n ), bude mít obecně tvary(x) = a 0 + a 1 x + a 2 x 2 + . . . + a k x k (2.45)Pokud bychom dosadili zadané body do této rovnice, získáme soustavu n + 1rovnic o k + 1 proměnných a 0 , a 1 , ..., a k , kde k


52 Křivky a plochy v počítačové graficeŘešení. Výsledný polynom bude mít tedy tvar y(x) = a 0 x+a 1 , po dosazení získámesoustavu rovnic0a 0 + a 1 = 01a 0 + a 1 = 23a 0 + a 1 = 3Pokud převedeme pravou stranu a jednotlivé řádky umocníme na druhou, získámefunkci δδ(a 0 , a 1 ) = (0a 0 + a 1 − 0) 2 + (1a 0 + a 1 − 2) 2 + (3a 0 + a 1 − 3) 2 .Určíme minimum funkce δpomocí parciální derivaceδ(a 0 , a 1 ) = a 2 1 + (a 0 + a 1 − 2) 2 + (3a 0 + a 1 − 3) 2 ,∂∂δ = 2(a 0 + a 1 − 2) + 6(3a 0 + a 1 − 3) = 0∂∂a 0∂∂δ = 2a 1 + 2(a 0 + a 1 − 2) + 2(3a 0 + a 1 − 3) = 0∂∂a 1Hledané koeficienty a i získáme řešením soustavy rovnic10a 0 + 4a 1 = 114a 0 + 3a 1 = 5Hledaná lineární funkce má výsledný tvar y(x) = 1314 x + 614 . Pro výpočet neznámých koeficientů hledaného aproximačního polynomu a i můžemeobecně využít maticového tvaru soustavy lineárních rovnic⎡ n∑︀n∑︀ n∑︀x 2ki . . . x k+1ii=1i=1 i=1. . . . . . . . . . . .n∑︀n∑︀ n∑︀x k+1i . . . x 2 i⎢i=1i=1 i=1⎣ n∑︀n∑︀x k i . . .ni=1x ii=1x k ix i⎤ ⎡ n∑︀⎤⎡ ⎤ y i x k iai=10⎢a 1. . .⎥⎣. . . ⎦ = n∑︀y i x , (2.47)i⎥ ⎢i=1⎥⎦ a k ⎣ n∑︀ ⎦y ii=1kde x i a y i jsou hodnoty jednotlivých bodů, n je počet zadaných bodů a k jestupeň výsledného aproximačního polynomu. Výslednou soustavu rovnic je možnévyřešit numericky, například použitím Gaussovy eliminační metody.


2.4 Metoda nejmenších čtverců 53☞Příklad 2.37. Určete aproximační křivku prvního stupně (přímku) pro body P 0 == [0, 0], P 1 = [1, 2], P 2 = [3, 3].Řešení. Vyjdeme ze vzorce 2.47, kde počet zadaných bodů n = 3 a stupeň výslednéhopolynomu k = 1. Po dosazení dostaneme⎡⎤ ⎡ ⎤3∑︀ 3∑︀3∑︀x 2 i x i[︂ ]︂⎢i=1i=1 ⎥ a0y i x i⎣ 3∑︀ ⎦ = ⎢i=1⎥ax i 3 1⎣ 3∑︀ ⎦ .y ii=1Po dosazení jednotlivých bodů P i = [x i , y i ], pro i = 1, 2, 3 dostaneme[︂ ]︂ [︂ ]︂ 10 4 a0=4 3 a 1i=1[︂ ]︂ 11.5Vyřešením této matice soustavy získáme výslednou aproximační přímku f(x) == 13x+ 6 (výsledek je stejný jako ve výše popsaném příkladu).14 14Obr. 2.5: Výsledná aproximační přímkaPokud se tedy omezíme na explicitní rovnice, existují dva případy, kdy nemůžemeinterpolovat a musíme se uchýlit k aproximaci.První byl již popsán a je dán požadavkem na nižší stupeň výsledného polynomu,než je potřebný podle zadaných bodů. Existuje však druhý případ zadání,kdy nemůžeme explicitní rovnicí získat pomocí interpolační křivky a musíme přejítk aproximační křivce. Ten je dán tím, že se jedná o explicitní křivku, jejiž grafemje funkce. Jistě víme, že u funkce může existovat pro jedno x pouze jedna funkční


54 Křivky a plochy v počítačové graficeyyxxObr. 2.6: Použití aproximačních křivekhodnota f(x). Pokud budeme mít zadáno pro jedno x více funkčních hodnot (např.měřením na více zařízeních), budeme muset opět využít některou aproximační metodu.Je asi patrné, že v případě potřeby modelování určitého tvaru křivky (křídlo letadla,tvar karosérie apod.) se bude využívat jiných křivek, obvykle v parametrickémtvaru. Tyto křivky již nemají omezení explicitního tvaru a spíše půjde o vhodný tvarkřivky, možnost změny tvaru a chování v souvislosti s pokud možno jednoduchýma rychlým výpočtem.2.5 Fergusonova křivkaRoku 1964 používal James C. Ferguson, jako analytik u amerického výrobce letadelBoeing, metodu pro generování parametrických křivek. Křivka je řízena dvěma bodya tečnými vektory v těchto bodech.Definice 2.38. Mějme dva body V 0 , V 1 dále mějme dva vektory v 0 , v 1 určujícísměr křivky v daných bodech. Fergusonovu kubiku vypočteme pomocí vzorceP(t) = F 0 (t)V 0 + F 1 (t)V 1 + F 2 (t)v 0 + F 3 (t)v 1 , kde t ∈< 0, 1 > . (2.48)jednotlivé bázové funkce F 0 , F 1 , F 2 a F 3 vypočteme jakoF 0 (t) = 2t 3 − 3t 2 + 1F 1 (t) = −2t 3 + 3t 2F 2 (t) = t 3 − 2t 2 + tF 3 (t) = t 3 − t 2Průběh jednotlivých polynomů je na obrázku 2.7.


2.5 Fergusonova křivka 55Obr. 2.7: Průběh polynomů F 0 , F 1 , F 2 a F 3 Fergusonovy kubikyVýsledný tvar Fergusonovy kubiky lze ovlivnit třemi způsoby:∙ polohou řídících bodů V 0 , V 1 ,∙ směrem tečných vektorů v 0 , v 1 ,∙ velikostí tečných vektorů v 0 , v 1 .Poznámka 2.39. Velikost vektorů ovlivňuje druhou derivaci křivky, čím je většívelikost, tím více se křivka přimyká k příslušným vektorům v 0 , v 1 .Výslednou rovnici Fergusonovy kubiky lze zapsat také v maticovém zápisu, kterýse skládá z vektoru t jednotlivých polynomů, dále z bázové matice M a vektorupodmínek p. Nastavením vektoru podmínek ovlivňujeme výsledný tvar křivky (řídícíbody a tečné vektory). Výslednou kubickou křivku pak vypočteme jako⎡⎤ ⎡ ⎤2 −2 1 1 p 1P(t) = tMp = [t 3 , t 2 , t, 1] ⎢−3 3 −2 −1⎥ ⎢p 2⎥⎣ 0 0 1 0 ⎦ ⎣p 3⎦ . (2.49)1 0 0 0 p 4Obvykle se setkáme při grafickém zadávání Fergusonovy kubiky s určením podmínekpomocí čtyř bodů P 0 , P 1 , P 2 , P 3 , kde dva body jsou pro určení řídících bodůV 0 = P 0 , V 1 = P 1 , a zbylé dva umožňují k řídícím bodům určit tečné vektoryv 0 = P 2 − P 0 , v 1 = P 3 − P 1 .Položíme-li hodnotu parametru t = 0, bude výsledkem Fergusonovy kubiky počátečníbod V 0 .P(0) = (2t 3 − 3t 2 + 1)V 0 + (−2t 3 + 3t 2 )V 1 + (t 3 − 2t 2 + t)v 0 + (t 3 − t 2 )v 1 = V 0 .V případě parametru t = 1, vyjde analogicky koncový bod V 1 .


56 Křivky a plochy v počítačové graficeP(1) = (2t 3 − 3t 2 + 1)V 0 + (−2t 3 + 3t 2 )V 1 + (t 3 − 2t 2 + t)v 0 + (t 3 − t 2 )v 1 = V 1 .Křivka tedy začíná v počátečním řídícím bodě V 0 a končí v koncovém řídícímbodě V 1 (interpolace krajních bodů).V případě derivace rovnice Fergusonovy křivky podle t a po dosazení parametrut = 0, resp. t = 1 dostaneme vektor totožný s tečným vektorem v 0 v počátečnímbodě, resp. tečným vektorem v 1 v koncovém bodě.P ′ (0) = (6t 2 − 6t)V 0 + (−6t 2 + 6t)V 1 + (3t 2 − 4t + 1)v 0 + (3t 2 − 2t)v 1 = v 0P ′ (1) = (6t 2 − 6t)V 0 + (−6t 2 + 6t)V 1 + (3t 2 − 4t + 1)v 0 + (3t 2 − 2t)v 1 = v 1☞Příklad 2.40. Vypočtěte rovnice Fergusonovy kubiky pro zadané řídící body V 0 == [1, 4], V 1 = [6, 4] a tečné vektory zadané dalšími dvěma body U 0 = [4, 5], U 1 == [3, 1].Řešení. Tečné vektory vypočteme ze zadaných bodů v 0 = U 0 − V 0 = (3, 1), v 1 == U 1 − V 1 = (−3, −3). Výsledné rovnice vypočteme z rovnice 2.48.x(t) =y(t) =(2t 3 − 3t 2 + 1)1 + (−2t 3 + 3t 2 )6 + (t 3 − 2t 2 + t)3 + (t 3 − t 2 )(−3)(2t 3 − 3t 2 + 1)4 + (−2t 3 + 3t 2 )4 + (t 3 − 2t 2 + t)1 + (t 3 − t 2 )(−3)x(t) = −10t 3 + 12t 2 + 3t + 1y(t) = −2t 3 + t 2 + t + 4V případě maticového zápisu dostaneme⎡⎤ ⎡2 −2 1 1x(t) = tMp = [t 3 , t 2 , t, 1] ⎢−3 3 −2 −1⎥ ⎢⎣ 0 0 1 0 ⎦ ⎣1 0 0 0163−3⎡⎤ ⎡2 −2 1 1x(t) = tMp = [t 3 , t 2 , t, 1] ⎢−3 3 −2 −1⎥ ⎢⎣ 0 0 1 0 ⎦ ⎣1 0 0 0⎤⎥⎦ = −10t3 + 12t 2 + 3t + 1441−3⎤⎥⎦ = −2t3 + t 2 + t + 4Výsledná parametrická rovnice Fergusonovy kubiky má tvar P(t) = (−10t 3 ++ 12t 2 + 3t + 1, −2t 3 + t 2 + t + 4) kde t ∈< 0, 1 >. Poznámka 2.41. V případě, kdy jsou oba vektory v 0 a v 1 nulové, potom budekřivka úsečkou mezi body V 0 a V 1 .


2.6 Spline křivky 57Obr. 2.8: Kubická spline křivka vzniklá napojením dvou Fergusonových kubik2.5.1 Navazování Fergusonových kubikNavazováním jednotlivých Fergusonových kubik dostaneme kubickou spline křivku(viz. následující podkapitola), která má parametrickou spojitost prvního řádu.Spojitost C 0 je zaručena totožnosti posledního bodu předcházejícího oblouku(druhý řídící bod) a počátečního bodu následujícího oblouku (první řídící bod následujícíhooblouku).Spojitost derivací prvního řádu (hladkost křivky) zaručíme identitou druhéhotečného vektoru předcházejícího oblouku s prvním tečným vektorem následujícíhooblouku (parametrická spojitost prvního řádu C 1 ). V případě, kdy by nám stačilapouze geometrická spojitost prvního řádu G 1 stačí, aby oba vektory byly pouzelineárně závislé.Pro zajištění spojitosti do druhé derivace (kubická spline křivka třídy C 2 ) musíplatitv i−1 + 4v i + v i+1 = 3(V i+1 − V i−1 ), i = 1, 2, . . . , n − 1 (2.50)2.6 Spline křivkySlovo „spline“ vzniklo z označení pružného dřevěného nebo kovového homogenníholaťkového křivítka, které užívali konstruktéři trupu lodí, když potřebovali při návrhutrupu lodí proložit hladkou křivku zadanými body. Označení spline poprvé použilIsaac Jacob Schoenberg v roce 1946.Intuitivně jsou spline křivky chápány jako po částech polynomiální funkce sespojitou derivací co nejvyššího stupně (C n ). Z hlediska použití v počítačové grafice


58 Křivky a plochy v počítačové graficemají největší význam kubické spline křivky, vzhledem k dříve popsaným výhodámkubických křivek, se také zaměříme na tuto skupinu spline křivek.An nth order (n Û 1 degree) spline is a curve which is C nÛ2 continuous in thedomain of definition, that is, the (n Û 2)th derivative of the curve exists everywherein the above domain.Spline křivky (splajny) obecně křivky složené z částí popsaných polynomy stupněk, v opěrných bodech řídicího polygonu je zajištěna spojitost až do (k-1) -ních derivacík = 1 nejjednodušší lineární splajn křivka složena z úseček spojujících řídicíbody, tedy lomená čára k = 2 kvadratický splajn křivka složena z částí kuželoseček,které mají v opěrných bodech společnou tečnu pro n+1 řídicích bodů je třeba vytvořitn úseků - každý z nich je popsán kvadratickým polynomem o 3 neznámýchkoeficientech => tj. celkem 3n neznámých koeficientů křivka má interpolovat n+1bodů => n+1 podmínek dále má být zajištěna spojitost 0. a 1. derivací ve vnitřních(n-1) bodech řídicího polygonu => 2(n-1) podmínek celkově je tedy geometrickydáno n+1+2(n-1) = 3n-1 podmínek => pro nalezení 3n neznámých koeficientů jetřeba jednu podmínku přidat: tečný vektor nebo vektor druhé derivace v prvnímnebo posledním bodě řídicího polygonu přidání dalšího kontrolního bodu na začáteknebo na konec (splajn jím nemusí procházet) nebo uzavření křivky k = 3 kubickýsplajn křivka složena ze segmentů křivek 3. stupně (nejčastěji Fergusonovy kubiky),které mají v opěrných bodech společnou tečnu a stejnou křivost pro n+1 řídicíchbodů je třeba vytvořit n úseků - každý z nich je popsán polynomem 3. stupně o 4neznámých koeficientech => tj. celkem 4n neznámých koeficientů křivka má interpolovatn+1 bodů => n+1 podmínek dále má být zajištěna spojitost 0., 1. a 2.derivací ve vnitřních (n-1) bodech řídicího polygonu => 3(n-1)) podmínek celkověje tedy geometricky dáno n+1+3(n-1) = 4n-2 podmínek => pro nalezení 4n neznámýchkoeficientů je třeba dvě podmínky přidat: tečný vektor nebo vektor druhéderivace v prvním a posledním bodě řídicího polygonu (přidání nulových vektorůdruhé derivace - tzv. přirozený splajn) přidání dalšího kontrolního bodu na začáteki na konec (splajn jimi nemusí procházet) nebo uzavření křivkyDefinice 2.42. Spline křivka n-tého řádu (stupně n−1) je po částech polynomiálníkřivka, která je složená ze segmentů popsaných polynomy stupně n−1 a v opěrnýchbodech je zajištěna spojitost třídy C n−2 . .P i (t i ) (k) = P i−1 (t i ) (k) , pro k = 1, 2, . . . , k − 1 a i = 1, 2, . . . , n − 1 (2.51)Nejjednodušší spline křivkou je lineární splajn. Jedná se o křivku složenou z úsečekspojujících opěrné body (lomená čára).Nejčastěji používanou křivkou je kubická spline křivka, což je tedy křivka P(t),t ∈ ⟨t 0 , t n ⟩, jejíž složky jsou po částech kubické polynomy v opěrných bodechP 0 , P 1 , . . . , P n a je třídy C 2 , tzn. má spojité derivace do druhého řádu.Poznámka 2.43. Přidání podmínek P ′′ (t 0 ) = P ′′ (t n ) = 0 dostaneme tzv. přirozený


2.7 Bézierova křivka 59kubický spline.Podle charakteru hodnot parametru t můžeme křivky rozdělit na∙ uniformní parametrizaci∙ neuniformní parametrizaciV případě uniformní parametrizace je krok parametru konstantní, tzn. že platí2.7 Bézierova křivkat i+1 − t i = 1, i = 0, 1, . . . , n − 1 .Mezi další parametrickou křivku vhodnou pro interaktivní vytváření a modifikacitvaru výsledného průběhu křivky patří Bézierová křivka. Pojmenována byla po francouzskéminženýru, Pierru Bézierovi, který pracoval jako konstruktér od roku 1933u automobilky Renault.Bézierova křivka patří mezi parametrické křivky a využívá se zejména díky svýmvlastnostem v oblasti modelování. Obecně je zadaná n-body a platí:m∑︁P(t) = P i Bi m (t), kde t ∈ ⟨0, 1⟩ , (2.52)i=0přičemž pro výpočet bázových funkcí B m i se využívá Bernsteinových polynomů .Výpočet i-tého Bernsteinova polynomu n-tého stupně vypočteme jakoB m i (t) =(︂ mi)︂t i (1 − t) n−i =(︂ )︂n!mi!(n − i)! ti (1 − t) n−i , kde = 1 a 0 0 = 1 .0(2.53)Zvyšováním počtu řídících bodů Bézierovy křivky sebou přináší i určité nevýhody.Při přidání nového řídícího bodu se změní tvar celé křivky. To může býtv případě modelování velmi nepříjemné. S rostoucím počtem řídících bodů a tedyi stupněm polynomů se křivka stále více vzdaluje od řídících bodů. Vzhledem k těmtonevýhodám se obvykle v praxi využívá nejčastěji Bézierova kubika .P(t) =3∑︁P i Bi 3 (t), kde t ∈ ⟨0, 1⟩ . (2.54)i=0Bázové funkce Bézierovy kubiky mají tvar:B 0 (t) = (1 − t) 3B 1 (t) = 3t(1 − t) 2B 2 (t) = 3t 2 (1 − t)B 3 (t) = t 3


60 Křivky a plochy v počítačové graficeObdobně jako v předcházejících případech lze Bézierovu křivku zapsat v maticovémtvaru. Omezíme se v tomto případě na Bézierovu kubiku, pro kterou byvýsledný zápis byl ve tvaru:⎡⎤ ⎡ ⎤−1 3 −3 1 P 0P(t) = tMp = [t 3 , t 2 , t, 1] ⎢ 3 −6 3 0⎥ ⎢P 1⎥⎣−3 3 0 0⎦⎣P 2⎦ , (2.55)1 0 0 0 P 3kde t je řádkový vektor polynomů pro parametr t, M je bázová matice a sloupcovývektor p obsahuje zadané řídící body.☞Příklad 2.44. Určete Bézierovu křivku zadanou čtyřmi body P 0 = [0, 0], P 1 == [10, 15], P 2 = [20, 15] a P 3 = [30, 0].Řešení. Využijeme vzorce 2.54 pro výpočet Bézierovy kubiky, neboť je křivka zadanáčtyřmi řídícími body.x(t) = 10 (︀ )︀31 t(1 − t 2 ) + 20 (︀ )︀32 t 2 (1 − t) + 30 (︀ 33)︀t3= 30ty(t) = 15 (︀ )︀31 t(1 − t 2 ) + 15 (︀ 32)︀t 2 (1 − t) = 45(t − t 2 )Výsledná křivka je dána parametrickou rovnicí P(t) = (30t, 45(t − t 2 )).(2.56)2.7.1 Základní vlastnosti Bézierovy křivkyKřivka prochází prvním a posledním řídícím bodem. Vyjdeme z rovnice 2.52, kdelze ukázat, že pro t = 0 platíP(0) =m∑︁P i Bi m (0) = P 0i=0P(1) =m∑︁P i Bi m (1) = P ni=0Ostatní řídící body mezi počátečním a koncovým jsou určeny k modelování tvaruvýsledné křivky.Mezi základní vlastností Bernsteinových polynomů patří, že součet všech Bernsteinovýchpolynomů pro libovolné t ∈ ⟨0, 1⟩ je roven jedné.Z obrázku a grafického znázornění Bernsteinových polynomů je také patrné, žekřivka prochází prvním a koncovým bodem. Pro t = 0 má pouze první polynomhodnotu jedna a ostatní mají hodnotu nula. Pro t = 1 je analogicky pouze hodnotaposledního polynomu rovna jedné, ostatní polynomy mají hodnotu nula.


2.7 Bézierova křivka 61Obr. 2.9: Grafické zobrazení Bernsteinových polynomů pro vybrané n (n = 3, 4 a 5)Mezi základní nevýhody Bézierových křivek patří, že se při změně polohy jednohořídícího bodu změní tvar celé křivky. Proto se nejčastěji v praxi používají Bézierovykubiky a jejich navazování.Pro plynulé navazování Bézierových kubik s dodržením spojitosti druhého řádubudeme potřebovat tečny v počátečním a koncovém bodě. Ty zjistíme pomocí derivacíjakoddt Bm i (t) = t(B m−1i−1 (t) − Bm−1 i (t))m−1ddt P(t) = ∑︁P′ (t) = B m−1i (t) (m (P i+1 − P i ))i=0V případě Bézierovy kubiky je tečna v počátečním bodě dána rovnicíP ′ (0) = m(P 1 − P 0 ) (2.57)Mezi další vlastnosti Bézierový křivky patří:P ′ (1) = m(P m − P m−1 ) (2.58)∙ vlastnost konvexního obalu - platí, že všechny body Bézierovy křivky jsouv konvexním obalu, který tvoří řídící polygon.∙ nezávislost na orientaci řídícího polygonu.∙ invariantnost, můžeme afinně transformovat jednotlivé body Bézierovy křivkynebo můžeme transformovat její řídící polygon a vypočteme Bézierovu křivkupro tento transformovaný řídící polygon, v obou případech dostaneme stejnývýsledek.


62 Křivky a plochy v počítačové grafice2.7.2 Použití Bézierových křivekBézierovy křivky se například používají pro popis TrueType fontů (kvadratickékřivky) a postscriptových fontů (kubické křivky). Výhoda vektorového popisu fontupomocí křivek je zřejmá. Můžeme libovolně měnit velikost fontu a podle měřítkafontu změnit i velikost řídících bodů (řídícího polygonů) křivek, dostaneme tak vždyostrá a přesná písmena. Proto můžeme v různých editorech libovolně měnit velikostpísma a velikost měnit klidně na desetinná místa. Ukázka možnosti spojité změnyfontu je na obrázku 2.10.Obr. 2.10: Změna velikosti fontu☞Příklad 2.45. Určete Bézierovu křivku pro následující body řídícího polygonu P 0 == [0, 0, 0], P 1 = [1, 1, 0], P 2 = [0, 1, 1] a P 3 = [0, 0, 2].Řešení. Využijeme vzorec pro výpočet Bézierovy kubiky 2.54 pro výpočet.x(t) =0B 3 0(t) + 1B 3 1(t) + 0B 3 2(t) + 0B 3 3(t) = 3t 3 − 6t 2 + 3ty(t) = 0B 3 0(t) + 1B 3 1(t) + 1B 3 2(t) + 0B 3 3(t) = 3t 3 − 3t 2z(t) = 0B 3 0(t) + 0B 3 1(t) + 1B 3 2(t) + 2B 3 3(t) = 5t 3 − 3t 2Výsledný křivka dána parametrickou rovnicí P(t) = (3t 3 −6t 2 +3t, 3t 3 −3t 2 , 5t 3 −− 3t 2 ).2.7.3 Geometrická konstrukce bodů Bézierových křivekPaul de Casteljau (narozen 1930 v Besançon, Francie), matematik a fyzik v Citroënu,využíval pro Bézierový křivky geometrickou konstrukci nezávisle na Bézierovi. Tentoalgoritmus dává stejný výsledek jako dříve popsaný analytický postup. Pokud jeP n n(t) bod na křivce pro daný parametr t, pak platí


2.7 Bézierova křivka 63P j ij > 0 (1 − t)Pj−1(t) = ⟨i−1 (t) + tPj−1 i (t)(2.59)jinak P iNa základě tohoto vztahu počítáme nové body, dokud nezískáme hledaný bodP n n(t), což je bod na křivce n-tého stupně pro parametr t.Obr. 2.11: Bod na Bézierově kubice pro parametr t = 0, 5Pro geometrickou konstrukci platí, že zvolíme poměr dělení (odpovídá parametrut) a následně rozdělíme jednotlivé úsečky řídícího polygonu daným poměrem.Opětovně dělíme vzniklé úsečky až do chvíle, kdy získáme hledaný bod Bézierovykřivky.Výhodu tohoto algoritmu oceníme při vykreslování v diskrétním rastru (obrazovkamonitoru). Jak je vidět na obrázku 2.11. Bod P33 je nejen bod Bézierovykřivky pro parametr t = 0, 5, ale také rozděluje danou křivku na dvě částí. Vygenerovanébody tvoří řídící body nových polygonů těchto dvou částí (body P 0 , P1 1 , P22a P3 3 tvoří řídící polygon levé části, body P3 3 , P3 2 , P3 1 a P 3 tvoří řídící polygon pravéčásti). Následně můžeme rekurzivně algoritmus aplikovat na obě části, čímž získámez každé další dvě části. V případě potřeby můžeme rekurzivní algoritmus ukončits ohledem na potřebu a vlastnosti křivky. V místech většího zakřivení můžeme generovatvíce bodů křivky a v místech menšího zakřivení zase méně. Pokud bychompoužili pro výpočet přímo analytický postup nastavujeme obvykle krok a následněpočítáme jednotlivé body křivky se stejným krokem bez závislosti na aktuálnímzakřivení.2.7.4 Konverze Fergusonovy kubiky na Bézierovu kubikuKaždou Fergusonovu kubiku je možné reprezentovat jako kubickou Bézierovu křivku.Jelikož je Fergusonova kubika zadaná dvěma body a dvěma tečnými vektory,stačí nastavit Bézierovu kubiku tak, aby se ztotožnily počáteční body, koncové bodya také vektory v počátečním a koncovém bodě. Bude tedy platit


64 Křivky a plochy v počítačové graficeP 0 = V 0 , P 1 = V 0 + 1 3 v′ 0, P 2 = V 1 − 1 3 v′ 1, P 3 = V 1 (2.60)☞Příklad 2.46. Určete Bézierovu kubiku pro nahrazení Fergusonovy kubiky V 0 == [1, 4], V 1 = [6, 4], v ′ 0 = (3, 1) a v ′ 1 = (−3, −3).Řešení. Převedeme zadání pro Fergusonovu kubiku na Bézierovu kubiku podle 2.60.P 0 = [1, 4],P 1 = [1, 4] + 1 13(3, 1) = [2,3 3 ],P 2 = [6, 4] − 1 (−3, −3) = [7, 5],3P 3 = [6, 4]Pro vypočtené body P 0 , P 1 , P 2 a P 3 vypočteme Bézierovu kubiku.⎡⎤ ⎡ ⎤−1 3 −3 1 [1, 4]P(t) = tMp = [t 3 , t 2 , t, 1] ⎢ 3 −6 3 0⎥ ⎢[2, 13]3 ⎥⎣−3 3 0 0⎦⎣ [7, 5] ⎦ ,1 0 0 0 [6, 4]Výsledná parametrická rovnice Bézierovy kubiky má tvar P(t) = (−10t 3 +126t 2 ++ 3t + 1, −2t 3 + t 2 + t + 4).2.7.5 Bézier splineBeziér spline je spline křivkou, u které se pro výpočet jejich jednotlivých částí používáBézierova křivka. Podle použitého stupně polynomu rozlišujeme lineární Bézierovuspline křivku, kvadratickou Bézierovu spline křivku, kubickou Bézierovu splinekřivku apod.V případě kubické Bézierovy spline křivky je potřeba zaručit spojitost třídy C 2 ,to znamená, že pro každé dva segmenty P 0 , P 1 , P 2 , P 3 a Q 0 , Q 1 , Q 2 , Q 3 musíme zaručitspojitost v napojovaném bodě až do druhých derivací.Spojitost třídy C 0 je zajištěna napojením koncového bodu prvního segmentus prvním bodem následujícího segmentu. Musí platitP 3 = Q 0 . (2.61)Spojitost třídy C 1 zaručíme identitou tečných vektorů (jako v předcházejícímpřípadě Fergusonovy křivky), a to tak, že společný bod pro dva oblouky se budenacházet v polovině úsečky tvořené předcházejícím a následujícím bodem. Využijemeprvní derivace Bézierovy kubiky


2.7 Bézierova křivka 65∑︁n−1P ′ (t) = ni=0B n−1i (t)(P i+1 − P i ) = nPro spojité první derivace musí platit[︃ n−1 ∑︁i=0P 3 − P 2 = Q 1 − Q 0 .∑︁n−1B n−1i (t)P i+1 −Pro spojitost druhých derivací (třída C 2 ) vyjdeme zi=0]︃B n−1i (t)P i . (2.62)Musí platit∑︁n−2P ′′ (t) = (n − 1)n B n−2i (t)(P i+2 − 2P i+1 + P i ) . (2.63)i=0P 3 − 2P 2 + P 1 = Q 2 − 2Q 1 + Q 0 ,(P 3 − P 2 ) − (P 2 − P 1 ) = (Q 2 − Q 1 ) − (Q 1 − Q 0 ) ,(P 3 − P 2 ) + (Q 1 − Q 0 ) = (P 2 − P 1 ) + (Q 2 − Q 1 ) .A protože pro spojitou první derivaci musí platit (P 3 − P 2 ) = (Q 1 − Q 0 ). Platí prospojité druhé derivace2(P 3 − P 2 ) = (P 2 − P 1 ) + (Q 2 − Q 1 ) . (2.64)Pokud má křivka v navazovaných bodech spojitost do druhé derivace (křivka jeve třídě C 2 ) můžeme křivku vzniklou navazováním jednotlivých Bézierových kubiknazvat Bézierová kubická spline křivka.2.7.6 Racionální Bézierova křivkaRacionální Bézierová křivka je zobecněním Bézierových křivek. Snahou je odstranitnevýhodu spočívající v nutnosti změny polohy některého řídícího bodu, kdykolichceme změnit tvar výsledné křivky tak, abychom docílili požadovaného tvaru. V případěprostorové křivky, je situace ještě komplikovanější. Hlavní idea spočívá v tom,že každému bodu řídícího polygonu přiřadíme reálné číslo (váhu), které bude ovlivňovatvýsledný tvar křivky. Můžeme tedy měnit výsledný tvar křivky bez nutnostizměny polohy bodů řídícího polynomu.Mějme zadanou posloupnost bodů P 0 , P 1 , ..., P n , a posloupnost reálných čísel(váhy v jednotlivých bodech) ω 0 , ω 1 , ..., ω n . Bézierova racionální křivka řádu n jedána vztahem


66 Křivky a plochy v počítačové graficeP(t) =n∑︀ω i P i Bi n (t)n∑︀=ω i Bi n(t) i=0i=0n∑︁P i Ri n (t) , (2.65)i=0kde i = 0, 1, ..., n ∈ N, ω ≧ 0, ω ∈ R. Polynomy Rinpolynomy .jsou racionální BernsteinovyRi n = ω iBi n (t)n∑︀. (2.66)ω j Bj n(t) j=0Bézierovy křivky jsou speciálním případem racionálních Bézierových křivek, kdykoeficienty ω i budou pro všechna i rovny jedné.ω i = 1, i = 0, 1, ..., n (2.67)Mezi základní vlastnosti racionální Bézierovy křivky platí obdobně jako v případěBézierových křivek, že začíná a končí v počátečním a koncovém bodě. Tvarvýsledné křivky můžeme ovlivnit nejen změnou polohy bodů řídícího polygonu, aletaké pomocí změny váhy nastavené pro jednotlivé řídící body.Poznámka 2.47. Blíže se racionálním tvarům budeme věnovat u NURBS křivek.2.8 Bézierova plochaRozšířením Bézierovy křivky získáme Bézierovu plochu. Ta patří mezi parametricképlochy určené síti bodů. Vznik byl stejně jako u Bézierových křivek motivován potřebouvhodných ploch pro modelování složitějších objektů (automobily, letadla,apod.). Prvotní využití také našly obdobně jako křivky u Renaultu (Bézier) a Citroenu(de Casteljau).Mějme zadanou obecně obdélníkovou řídící síť bodů, zapsanou v matici M o velikostim × n⎡⎤P 00 P 01 . . . P 0mM = ⎢P 10 P 11 . . . P 1m⎥⎣ . . . . . . . . . . . . ⎦ . (2.68)P n0 P n1 . . . P nmVýslednou Bézierovou plochu vypočteme jakoP(u, v) =m∑︁j=0n∑︁P ij Bi n (u)Bj m (v), kde u, v ∈ ⟨0, 1⟩ . (2.69)i=0Bézierovou plochu lze stejně jako Bézierovu křivku zapsat v maticovém tvaru


2.8 Bézierova plocha 67⎡⎤ ⎡ ⎤P 00 P 01 . . . P 0m BP(u, v) = [︀ B0 n (u) B1 n (u) ... Bn(u) ]︀ 0 m (v)n ⎢P 10 P 11 . . . P 1m⎥ ⎢B1 m (v)⎥⎣ . . . . . . . . . . . . ⎦ ⎣ ... ⎦P n0 P n1 . . . P nm Bm(v)mObdobně jako v případě Bézierovy křivky jsou BinMezi základní podmínky patříBernsteinovy polynomy.∙ Bézierova plocha prochází svými čtyřmi rohovými body sítě. Tyto body jsousoučástí hledané Bézierovy plochy. Ostatními řídícími body sítě může v některýchpřípadech sice plocha projít, ale obecně jimi neprochází.∙ Okrajové řídící body jednotlivých stran zadané sítě bodů tvoří také zadání proBézierovy křivky. Plocha je tedy ohraničena (nikoli zadaná) čtyřmi Bézierovýmikřivkami.∙ Všechny body výsledné Bézierovy plochy leží v konvexním obalu zadanéhopomocí řídící sítě.Okrajovými křivkami Bézierovy plochy jsou Bézierovy křivky dané okrajovýmilomenými čarami sítě. Všechny body Bézierovy plochy navíc leží v konvexním obaluřídící sítě.Příklad 2.48. Určete Bézierovu plochu zadanou čtvercovou síti bodů M. Jednotlivébody jsou P 00 = [0, 0, 0], P 01 = [1, −1, 0], P 02 = [3, 0, 1], P 10 = [0, 1, 0], P 11 = [1, 0, 2],P 12 = [2, 2, 4], P 20 = [−1, 2, −1], P 21 = [1, 1, 3], P 22 = [2, 3, 5].Řešení. Využijeme vzorce pro výpočet Bézierovy plochy 2.70. Dostaneme⎡⎤ ⎡ ⎤P(u, v) = [︀ B0(u) 2 B1(u) 2 B2(u) ]︀ P 00 P 01 P 02 B0(v)22 ⎣P 10 P 11 P 12⎦ ⎣B 1(v)2 ⎦P 20 P 21 P 22 B2(v)2Pro Bernstainovy polynomy druhého stupně podle 2.53 platíB 2 0(t) = (1 − t) 2B 2 1(t) = 2t(1 − t)B 2 2(t) = t 2Po dosazení a vynásobení dostaneme hledané parametrické rovnice pro parametryu, v ∈< 0, 1 >x(u, v) = −v 2 (1 − u) 2 + 2u(1 − u)(1 − v) 2 + 4uv(1 − u)(1 − v)++2u(1 − u)v 2 + 3u 2 (1 − v) 2 + 12u 2 v(1 − v) + 6u 2 v 2y(u, v) = 2v(1 − v)(1 − u) 2 + 2v 2 (1 − u) 2 − 2u(1 − u)(1 − v)++2u(1 − u)v 2 + 4vu 2 (1 − v) + 3v 2 u 2z(u, v) = −v 2 (1 − u) 2 + 2u(1 − u)(1 − v) + 3uv 2 (1 − u)++u 2 (1 − v) 2 + 8vu 2 (1 − v) + 5v 2 u 2☞


68 Křivky a plochy v počítačové graficePoznámka 2.49. Z vlastností Bézierovy plochy víme, že pro hodnoty parametruu, v = 0, 1, budou výsledkem rohové řídící body. Což může sloužit pro kontroluvýpočetní správnosti našeho řešení. Ověřte na příkladě.2.9 Coonsova B-spline křivkaTato křivka patří mezi obecné B-spline křivky, se kterými se seznámíte v další části.V tomto případě se zaměříme na Coonsovu kubiku a následně Coonsovu B-splinekřivku.Coonsova kubika je parametrickou křivkou, pojmenovanou po Steven Anson Coonsovi,která je určena čtyřmi řídícími body P 0 , P 1 , P 2 , P 3 , a definována vztahemP(t) = 1 63∑︁P i C i (t), kde t ∈ ⟨0, 1⟩ (2.70)i=0Obr. 2.12: Coonsova kubika zadána čtyřmi řídícími body P 0 , P 1 , P 2 a P 3přičemž pro výpočet bázových funkcí platí:C 0 (t) = −t 3 + 3t 2 − 3t + 1C 1 (t) = 3t 3 − 6t 2 + 4C 2 (t) = −3t 3 + 3t 2 + 3t + 1C 3 (t) = t 3Na obrázku 2.13 jsou zobrazeny jednotlivé průběhy bázových funkcí. Opět můžemekřivku zapsat v maticovém vyjádření a to jako⎡⎤ ⎡ ⎤−1 3 −3 1 p 0P(t) = tMp = [t 3 , t 2 , t, 1] 1 ⎢ 3 −6 3 0⎥ ⎢p 1⎥6 ⎣−3 0 3 0⎦⎣p 2⎦ , (2.71)1 4 1 0 p 3


2.9 Coonsova B-spline křivka 69Obr. 2.13: Průběh bázových funkcí C 0 , C 1 , C 2 a C 3 Coonsovy kubiky☞Příklad 2.50. Najděte Coonsovu kubickou B-spline křivku určenou řídícím polygonemP 0 = [0, 0], P 1 = [2, 5], P 2 = [4, 4], P 3 = [6, 3].Řešení. Vyjdeme z rovnice 2.73x(t) = 0(−t3 + 3t 2 − 3t + 1) + 2(3t 3 − 6t 2 + 4) + 4(−3t 3 + 3t 2 + 3t + 1) + 6(t 3 )=6= 6t3 − 12t 2 + 8 − 12t 3 + 12t 2 + 12t + 4 + 6t 3 12t + 12= = 2t + 266y(t) = 0(−t3 + 3t 2 − 3t + 1) + 5(3t 3 − 6t 2 + 4) + 4(−3t 3 + 3t 2 + 3t + 1) + 0(t 3 )6= 15t3 − 30t 2 + 20 − 12t 3 + 12t 2 + 12t + 46== 1 2 t3 − 3t 2 + 2t + 4Výsledná parametrická rovnice má tvar P(t) = (2t + 2, 1 2 t3 − 3t 2 + 2t + 4).Pro parametr t = 0 platíC 0 (0) = 1 ,C 1 (0) = 4 ,C 2 (0) = 1 ,C 3 (0) = 0 .Počáteční bod křivky tedy leží v


70 Křivky a plochy v počítačové graficeP(0) = 1 6 (P 0 + 4P 1 + P 2 ) .Počáteční bod tedy leží v antitěžišti trojúhelníka zadaného prvními třemi bodyP 0 , P 1 , P 2 . To znamená, že leží na těžnici trojúhelníka procházející vrcholem P 1a vzdálenost vrcholu P 1 od počátečního bodu P (0) je rovna jedné třetině délkytěžnice.Obdobně platí i pro koncový bod P(1), že leží v antitěžišti trojúhelníku danéhoposledními třemi body P 1 , P 2 , P 3 .P(1) = 1 6 (P 1 + 4P 2 + P 3 ) .☞Příklad 2.51. Ověřte počáteční a koncový bod u předcházejícího příkladu.Řešení. Dosazením za t = 0 resp. t = 1 dostaneme počáteční resp. koncový bod.P(t) = (2t + 2, 1 2 t3 − 3t 2 + 2t + 4)P(0) = (2, 4)P(1) = (4, 4)Výsledná parametrická rovnice má tvar P(t) = (2t + 2, 1 2 t3 − 3t 2 + 2t + 4).Pro výpočet tečných vektorů v počátečním a koncovém bodě platí vyjdeme z derivacíbázových funkcínásledně tedy mámeC 0(t) ′ = −3(1 − t) 2 ,C 1(t) ′ = 9t 2 − 12t ,C 2(t) ′ = −9t 2 + 6t + 3 ,C 3(t) ′ = 3t 2 .P ′ (0) = 1 6 (−3P 0 + 3P 2 ) = 1 2 (P 2 + 3P 0 ) ,směrnice tečny v počátečním bodě P(0) je totožná se směrnicí přímky danouřídícími body P 0 , P 2 . Tečna v počátečním bodě je tedy rovnoběžná s přímkou danouprvním a třetím bodem.Obdobně pro tečný vektor v koncovém bodě platíP ′ (1) = 1 6 (−3P 0 + 3P 2 ) = 1 2 (P 2 + 3P 0 ) .Tečna v koncovém bodě je tedy rovnoběžná s přímkou danou druhým a čtvrtýmbodem.Mezi další vlastnosti Coonsovy kubiky platí, že křivka leží v konvexním obaluřídících bodů P 0 , P 1 , P 2 , P 3 .


2.10 Coonsova B-spline plocha 712.9.1 Coonsův kubický B-splineCoonsův kubický B-spline vznikne tak, že budeme na sebe napojovat Coonsovykubiky a přitom zajistíme spojité napojování do druhé derivace (spojitost druhéhořádu). Mějme dvě Coonsovy kubikyP(t) = 1 63∑︁P i C i (t), R(s) = 1 6i=03∑︁R i C i (s), kde t, s ∈ ⟨0, 1⟩ . (2.72)i=0Musí platitP (i) (1) = R (i) (0), i = 0, 1, 2 . (2.73)∙ Pro spojitost musí platit P (1) = R(0), to znamená, žeP 1 + 4P 2 + P 3 = R 0 + 4R 1 + R 2 .∙ Pro spojitost prvních derivací musí platit P ′ (1) = R ′ (0), to znamená, žeP 3 − P 1 = R 2 − R 0 .∙ Pro spojitost druhých derivací musí platit P ′′ (1) = R ′′ (0), to znamená, žeP 1 − 2P 2 + P 3 = R 0 − 2R 1 + R ′ 2 .Abychom tedy dodrželi všechny spojitosti až do druhého řádu musí platit P 1 == R 0 , P 2 = R 1 , P 3 = R 2 , jinak řečeno poslední tři řídící body prvního segmentumusí být rovny prvním třem bodům druhého segmentu.Poznámka 2.52. Coonsův kubický B-spline je speciálním případem B-spline křivkypro stupeň p = 3, uzlový vektor t = (−3, −2 − 1, 0, 1, 2, 3, 4) a m = 7. Jedná seo neracionální uniformní B-spline křivku. Více se dozvíte v kapitole o obecnýchB-spline křivkách.2.10 Coonsova B-spline plochaRozšířením Coonsovy B-spline křivky je Coonsova B-spline plocha, která má podobnéchování jako křivka. Jedná se o plochu zadaná síti bodů m × n. Vycházíz Coonsovy kubické B-spline křivky. Jedná se o plochu řešenou po částech, výslednýstupeň, na rozdíl od Bézierovy plochy, neroste s počtem řídících bodů. Plocha jezadánaP(u, v) = 1 C(u)MC(v) , (2.74)36


72 Křivky a plochy v počítačové graficekde u,v jsou parametry, M je matice řídících bodů a C(u), C(v) jsou vektorovéfunkce parametru u a v. Kde tyto funkce lze zapsat jakokde složky jsou dány předpisemC(t) = (C 0 (t), C 1 (t), C 2 (t), C 3 (t)), (2.75)C 0 (t) = −t 3 + 3t 2 − 3t + 1C 1 (t) = 3t 3 − 6t 2 + 4C 2 (t) = −3t 3 + 3t 2 + 3t + 1C 3 (t) = t 3Hranice plochy jsou kubické B-spline křivky.zxyObr. 2.14: Ukázka Coonsovy bikubické B-spline plochyUrčení okrajových křivek je stejné, jako v minulé části. Pro u = 0 platí:C 0 (0) = 1, C 1 (0) = 4, C 2 (0) = 1, C 3 (0) = 0 .Po dosazení do rovnice (2.74) dostaneme:po úpravě získámeP(0, v) = 1 36[︀1 4 1 0]︀MC(v) , (2.76)


2.11 NURBS křivky a plochy 73P(0, v) = 1 363∑︁(P 0,i + 4P 1,i + P 2,i )C(v) . (2.77)i=0Jedná se tedy o Coonsovu kubickou B-spline křivku, která je určena vrcholy Q i ,kdeQ i = 1 6 (P 0,i + 4P 1,i + P 2,i ), kde i = 0, 1, 2, 3 . (2.78)Analogicky by to platilo pro ostatní tři okrajové křivky.Výhoda Coonsovy B-spline plochy spočívá v napojování jednotlivých částí nasebe. Výsledná plocha se v podstatě skládá z jednotlivých částí o rozměru 4x4 bodů(P 0,0 , · · · , P 0,3 ) × (P 0,0 , · · · , P 3,0 ). Pro další část nemusíme jako v případě Bézierovyplochy přidávat další část plochy o rozměru 4x4, ale zvětšíme rozsah v jednom zesměrů o jedna (místo 4x4 bude mít např. 5x4). Výsledná plocha se pak bude skládatze dvou samostatných částí, kde první část bude dána řídícími body (P 0,0 , · · · , P 0,3 )×× (P 0,0 , · · · , P 3,0 ) a druhá (P 1,0 , · · · , P 0,4 ) × (P 1,0 , · · · , P 3,4 ).Výslednou obecnou plochu m × n bodů, budeme analogicky jako Coonsovy B--spline křivky počítat a vykreslovat postupně, vždy po částech 4×4 bodů. Znamenáto tedy, že například pro síť bodů 5 × 7 řídících bodů budeme počítat 2 × 4 samostatnýchčástí, tedy celkem 8 bikubických Coonsových ploch. Výsledná bikubickáB-spline plocha bude mít parametrickou spojitost třídy C 2 a z hlediska modelování,bude změna jednoho řídícího bodu ovlivňovat pouze segmenty s ním spojené.Poznámka 2.53. Coonsova B-spline plocha je speciálním případem obecných B--spline ploch, kterými se budeme zabývat v následující kapitole.2.11 NURBS křivky a plochyNURBS křivky a plochy jsou v současnosti zřejmě nejpoužívanější reprezentací obecnýchkřivek a ploch v řadě aplikací zahrnujících oblasti designu, navrhování. Jsoupodporovány prakticky všemi významnými softwarovými CAD/CAM nástroji. Tatoforma matematické reprezentace křivek a ploch skýtá řadu výhod, a to jak v rámcireprezentace běžných analytických tvarů jako jsou např. kuželosečky, tak pro popissložitých obecných tvarů např. v podobě karoserie automobilů. U složitých modelůse uvádí, že použití NURBS ploch přináší až 75 % úsporu v počtu ploch nebo plátů,které je nutno vytvořit. V extrémních případech může být toto zjednodušení procesumodelování ještě mnohem výraznější. Masivnímu rozšíření napomohly rovněžvynikající editační možnosti. Tvorba křivek i ploch je intuitivní a manipulace s řídícímibody má pouze omezený lokální charakter. Neméně důležitá je také podporaNURBS entit v řadě nejpoužívanějších výměnných formátů, jakými jsou standardySTEP a IGES. Následující kapitoly se budou snažit podat základní přehled užitého


74 Křivky a plochy v počítačové graficematematického aparátu, který je ukryt za poněkud kostrbatou zkratkou NURBS,tedy Neuniformní Racionální B-Spline křivky a plochy.Tato kapitola navazuje na předešlý výklad Bézierových křivek a ploch, které jsouspeciálním případem neracionálních B-spline křivek a ploch. Neracionální B-splinejsou podmnožinou obecnějších racionálních B-spline. Vzájemný vztah těchto tříd jezachycen na obr. 2.11.BézierNeracionální B-splineNURBSObr. 2.15: Vzájemný vztah mezi Bézierovými, neracionálními B-spline a NURBSkřivkami a plochami2.11.1 B-spline bázové funkceVýznam bázových funkcí spočívá v reprezentaci interpolačního nebo aproximačníhoschématu vyjadřujícího vztah mezi průběhem křivky a řídícím polygonem. Vlastnostitohoto schématu jsou dány volbou bázových funkcí. Např. pro Bézierovy křivkyjsou využity Bernsteinovy báze. Ty mají ovšem dvě zásadní omezení. Počet řídícíchbodů určuje řád křivky. To znamená, že např. kubická křivka musí být definovánapomocí právě čtyř kontrolních bodů. Chceme-li tedy změnit stupeň křivky, musímezměnit počet kontrolních bodů. Dalším faktorem komplikujícím praktické využitíje globální povaha těchto bází. Hodnota funkce je nenulová nad otevřeným intervalem(0, 1) a výsledná podoba parametrické křivky je závislá na poloze všech řídícíchbodů. To znemožňuje provádět snadno lokální změny průběhu křivky nebo plochy.Před samotným popisem NURBS křivek a ploch zavedeme v úvodní podkapitolepojem bázových spline funkcí (ang. Basis Spline). Častěji jsou označovány zkrácenějako B-spline a zahrnují již zmíněné Bernsteinovy báze jako svůj speciální případ.Obecně je spline funkcí nekonečně mnoho. Jako B-spline bývá v praxi také častonazývána parametrická křivka, která je zobecněním Bézierovy křivky. V této částitextu budeme mít při použití výrazů B-spline na mysli výhradně systém bázovýchspline funkcí.Křivky, které jsou reprezentovány pomocí pouze jednoho polynomiálního neboracionálního segmentu, jsou limitovány v rozsahu možného použití. A to zejménaz důvodů potřeby vysokého počtu řídících bodů a s tím souvisejícím rovněž vysokýmstupněm křivky. To přináší komplikace s numerickou stabilitou a efektivností výpočtu.Také komplexního tvaru je možno dosáhnout pouze za cenu vysokého stupněkřivky. Komplikovaná je také interaktivní manipulace s takovými křivkami v softwarovýchnástrojích, jelikož jejich modifikace nemá lokální charakter. Řešení uvedených


2.11 NURBS křivky a plochy 75problémů spočívá v zavedení křivek, které jsou po částech polynomiální nebo po částechracionální. Parametrický prostor, nad kterým je křivka definována, je rozdělenpomocí zlomových bodů (ang. breakpoints) ve kterých je zaručen určitý stupeň návaznostijednotlivých segmentů. Tímto rozčleněním zajistíme možnost lokální manipulaces jedním segmentem při zachování požadované návaznosti se sousednímisegmenty, což činí práci s takovouto křivkou mnohem intuitivnější a snazší.Pro možnost měnit vliv jednotlivých řídících bodů na průběh křivky je důležitýtaké tzv. uzlový vektor. Uzlový vektor nebo také vektor parametrizací u == (u 0 , u 1 , ..., u m ) je definován jako neklesající sekvence m + 1 reálných čísel, přičemžplatí u 0 ≦ u 1 ≦ ... ≦ u m .Nyní můžeme definovat i-tou normalizovanou bázovou B-spline funkci stupně poznačenou jako N p i (u) pomocí rekurentního Cox-de Boorova vztahu (2.79). Existujíi jiné formulace, ale z hlediska následné počítačové implementace se rekurentní vztahjeví jako nejvýhodnější.N 0 i (u) ={︂ 1 ui ≦ u < u i+10 jinakN p i (u) = u − u iu i+p − u iN p−1i (u) + u i+p+1 − uu i+p+1 − u i+1N p−1i+1 (u) (2.79)Ještě dodejme, že funkce N p i je polynom p-tého stupně. Někdy se místo stupněhovoří o řádu křivky. Mezi řádem k a stupněm p platí vztah k = p + 1. Úsečka jetedy (lineární) křivka prvního stupně a druhého řádu. Nejčastěji se používají křivkydruhého (kvadrika, p = 2 a k = 3) a třetího (kubika, p = 3 a k = 4) stupně.Křivky a plochy vyšších řádů však mohou vzniknout při manipulacích s původnějednoduchými entitami v modelovacích nástrojích. Obecně platí, že čím je řád vyšší,tím je do výpočtu zahrnuto více řídících bodů a výpočet trvá déle.Nyní uveďme některá přímá pozorování plynoucí z výše uvedených definic.∙ Pro výpočet i-té bázové funkce potřebujeme znát uzlový vektor u a stupeňbázové funkce p.∙ Funkce N p i (u) je nezáporná pro libovolné i, p a u.∙ S výjimkou p = 0 nabývá funkce N p i (u) právě jednoho maxima.∙ Z uvedené definice je zřejmé, že N 0 i (u) je tzv. skoková funkce, která nabývájednotkových hodnot v intervalu ⟨u i , u i+1 ). Uvedený interval se často označujejako rozpětí uzlů (ang. knot span).∙ Předchozí pozorování lze zobecnit pro funkci N p i (u) libovolného stupně p. Tatofunkce nabývá nenulových hodnot pouze pro u ∈ ⟨u i , u i+p+1 ) (ang. local support).∙ Pro libovolné rozpětí uzlů ⟨u i , u i+1 ) je nejvýše p + 1 bázových funkcí stupně pnenulových. Konkrétně se jedná o funkce


76 Křivky a plochy v počítačové graficeN p i−p (u), N p i−p+1 (u), . . . , N p i (u) .Díky tomu je B-spline křivka závislá pouze na k nejbližších kontrolních bodecha vliv kontrolních bodů na výsledný tvar křivky, potažmo plochy, má pouzelokální charakter.∙ Součet všech bázových funkcí stupně p na intervalu ⟨u i , u i+1 ) je roven 1i∑︁j=i−pN p j (u) = 1 , u ∈ ⟨u i, u i+1 ) .∙ Označíme-li počet uzlů jako m + 1 a počet bázových funkcí stupně p pomocín + 1, pak platí m = n + p + 1.∙ Pozorný čtenář si jistě povšimnul, že definice uzlového vektoru nijak nebránív možném dělení nulou v (2.79). Pro tento případ zavedeme pravidlo 0/0 def= 0.∙ Funkce N p i (u) jsou po částech polynomiální funkce definované nad celým oboremreálných čísel R. Podstatný je však jejich průběh jen na intervalu ⟨u 0 , u m ).∙ V uzlu s násobností k je bázová funkce N p i (u) Cp−k spojitá. Připomeňme,že křivka je C n spojitá, pokud má spojité derivace podle parametru u až don-tého řádu.Průběh bázové funkce N p i (u) je zcela určen relativním rozmístěním uzlů na pomyslnéreálné ose. Posunutí těchto bodů ani změna měřítka se nijak neprojeví naprůběhu bázové funkce a ani na tvaru křivky nebo plochy, která je nad těmito bázovýmifunkcemi definována. Neformálně řečeno, uzlový vektor přiřazuje jednotlivýmpolynomům začátky a konce jejich vlivu v rámci celého intervalu vymezeného prvníma posledním uzlem.Rozlišujeme čtyři typy uzlových vektorů.1. Uniformní uzlový vektor (ang. uniform) splňuje podmínku rovnoměrného rozloženíuzlů. Platí tedy, že vzdálenosti mezi jednotlivými uzly jsou konstantníPříklad: (0.0, 0.25, 0.5, 0.75 1.0)u i+1 − u i = konst. , 0 ≦ i < m .2. Otevřený uniformní vektor (ang. open uniform) je uniformní uzlový vektors vyjímkou k totožných počátečních a koncových uzlů. Připomeňme, že k značířád bázové funkce.u 0 = u i ,u i+1 − u i = konst. ,u m−k+1 = u i ,0 < i < kk − 1 ≦ i ≦ m − km − k + 2 ≦ i ≦ mPříklad: (1, 1, 1, 2, 3, 4, 5, 6, 6, 6), (0, 0, 0, 1, 1, 1)


2.11 NURBS křivky a plochy 773. Neperiodický uzlový vektor (ang. non-periodic)Příklad: (1, 1, 2, 3, 4, 4, 6, 6)(a, . . . , a, u⏟ ⏞ p+1 , . . . , u m−p−1 , b, . . . , b) . (2.80)⏟ ⏞p+1p+14. Všechny ostatní uzlové vektory se označují jako neuniformní (ang. non-uniform).Příklad: (1, 1, 1, 2, 2, 3, 5, 6, 6, 7, 7)V dalším výkladu se z praktických důvodů omezíme pouze na neperiodické uzlovévektory.110.80.80.6N 0 10.6N 1 10.40.40.20.200 1 2 3 4 5 6a)00 1 2 3 4 5 6b)10.810.80.6N 2 10.6N 3 10.40.40.20.200 1 2 3 4 5 6c)00 1 2 3 4 5 6d)Obr. 2.16: Ukázka čtyř bázových funkcí pro uniformní uzlový vektor (0, 1, . . . , 6).a) Ni 0 je skoková funkce nabývající nenulové hodnoty pouze nad intervalem⟨u i , u i+1 ). b) Ni 1 je po částech lineární funkce (p = 1) rozpínající se přes dvě uzlovározpětí. c) Ni2 je po částech kvadratická funkce nad třemi uzlovými roztečemi.d) Ni 3 je po částech kubická funkce nabývající nenulových hodnot nad čtyřmi uzlovýmiroztečemi. A takto bychom mohli pokračovat dále pro vyšší stupně bázovýchfunkcí


78 Křivky a plochy v počítačové grafice10.8N 2 0N 2 2N 2 40.60.4N 2 1N 2 30.200 0.5 1 1.5 2 2.5 31a)0.8N 2 0N 2 2N 2 40.60.4N 2 1N 2 30.200 0.5 1 1.5 2 2.5 3b)Obr. 2.17: Bázové funkce neuniformního uzlového vektoru a) (0, 0, 0, 1.5, 1.5, 3, 3, 3)a b) (0, 0, 0, 1, 1, 3, 3, 3). Pro oba případy platí m = 7 a p = 22.11.2 Derivace B-spline bázových funkcíPři praktickém použití neracionálních i racionálních B-spline křivek a ploch se neobejdemebez znalosti výpočtu jejich derivací. Často nastane potřeba vypočítat směrtečny křivky nebo normálový vektor plochy v zadaném bodě. Derivace bázové funkceje dánaddu N p i (u) =pN p−1pi (u) −N p−1i+1 (u) . (2.81)u i+p − u i u i+p+1 − u i+1Pro výpočet derivací vyšších řádů vyjdeme z rovnice (2.81) a dalším derivovánímobdržímed kdu k N p i (u) =pu i+p − u id k−1dup−1Nk−1 ip(u) −u i+p+1 − u i+1přičemž platí, že derivace vyšších řádů než p jsou rovny nuled k−1dup−1Nk−1 i+1(u) , (2.82)d kdu N p k i (u) = 0 pro k > p . (2.83)


2.11 NURBS křivky a plochy 79110.50ddu N 0 10.50ddu N 1 1-0.5-0.5-1-10 1 2 3 4 5 60 1 2 3 4 5 6a)b)110.50ddu N 2 10.50ddu N 3 1-0.5-0.5-1-10 1 2 3 4 5 60 1 2 3 4 5 6c)d)Obr. 2.18: Ukázka derivací bázových funkcí z obr. 2.17


80 Křivky a plochy v počítačové graficeN 2 0 · · · N 2 i · · · N 2 m−3N 1 0 · · · N 1 i N 1 i+1 · · · N 1 m−2N 0 0 · · · N 0 i N 0 i+1 N 0 i+2 · · · N 0 m−1u 0 · · · u i u i+1 u i+2 u i+3 · · · u mTab. 2.1: Bázová funkce N 2 i (u) ≠ 0 jen pro u ∈ ⟨u i , u i+2+1 ). Důvodem je rekurentnídefinice B-spline bázových funkcí, kdy bázová funkce stupně p závisí na funkcíchnižšího stupně až do p = 0. Výsledkem je trojúhelníkový vzor zachycený na uvedenétabulceN 2 0 · · · N 2 i−2 N 2 i−1 N 2 i · · · N 2 m−3N 1 0 · · · N 1 i−1 N 1 i · · · N 1 m−2N 0 0 · · · N 0 i · · · N 0 m−1u 0 · · · u i u i+1 · · · u mTab. 2.2: Pro libovolné u ∈ ⟨u i , u i+1 ) je nenulových nejvýše p + 1 bázových funkcí,konkrétně N p i−p (u), N p i−p+1 (u),. . . ,N p i (u)2.11.3 Neracionální B-spline křivkyV této kapitole se seznámíme s neracionálními B-spline křivkami . Prvním, kdose zabýval významem B-spline funkcí byl v 19. století N. Lobachevsky. B-splinebyly konstruovány pomocí konvoluce určitých hustot rozdělení pravděpodobnostidefinovaných nad speciálním uzlovým vektorem. V roce 1946 I. J. Schoenberg použilB-spline pro vyhlazení statistických dat. Z hlediska dalšího aplikačního rozšíření bylvýznamný objev rekurentní formule C. de Boorem, M. Coxem a L. Mansfieldem.B-spline křivky představují zobecnění Bézierových křivek.Parametrická B-spline křivka stupně p v d-dimenzionálním prostoru je zobrazeníC(u) : ⟨u 0 , u m ) → R d a definujeme ji jako lineární kombinaci m−p bázových B-splinefunkcí N p iC(u) =n∑︁P i N p i (u) . (2.84)i=0Body P i ∈ R d tvoří množinu n + 1 řídících bodů řídícího polygonu křivky C. Křivkaje definována nad intervalem ⟨a, b), kde a a b jsou krajní uzly uzlového vektoru u.V další části textu se omezíme na speciální případ neperiodického neuniformníhouzlového vektoru, který je v praxi nejčastější a je tvaruu = (a, . . . , a, u⏟ ⏞ p+1 , . . . , u m−p−1 , b, . . . , b) .⏟ ⏞p+1p+1


2.11 NURBS křivky a plochy 81Násobnost krajních uzlů zajistí, že výsledná křivka vždy prochází počátečním P 0a koncovým P n řídícím bodem.Nyní opět uveďme některá důležitá pozorování.jsou poly-∙ C je po částech polynomiální křivka jelikož i její bázové funkce N p inomiální funkce.∙ Stupeň křivky p, počet řídících bodů n + 1 a délka uzlového vektoru m + 1jsou vzájemně svázány vztahemn + 1 = m − p .10.8N 2 0N 2 1N 2 2 N 2 3 N 2 4N 2 5N 2 60.60.40.200 1 2 3 4 5a)P 1P 2C(1)P 0P 5 P 6C(2)C(4)C(3)P 3 P 4b)Obr. 2.19: a) Kvadratické bázové funkce pro uzlový vektor (0, 0, 0, 1, 2, 3, 4, 5, 5, 5).b) Kvadratická B-spline křivka nad uvedeným uzlovým vektorem s vyznačenýmvlivem bázových funkcí. Porovnejte vliv jednotlivých bází s tab. 2.2Vyjmenujme alespoň některé základní vlastnosti B-spline křivek.


82 Křivky a plochy v počítačové grafice10.80.6N 2 0N 2 1 N 2 2N 2 3N 2 4 N 2 5N 2 60.40.200 1 2 3 4a)P 2P 1P 0C(1)P 5 P 6C(2)C(3)P 3 P 4b)Obr. 2.20: a) Kubické bázové funkce pro uzlový vektor (0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4).b) Kubická B-spline křivka nad uvedeným uzlovým vektorem s vyznačeným vlivembázových funkcí. Opět porovnejte vliv jednotlivých bází s tab. 2.2∙ Suma všech B-spline bázových funkcí je pro jakýkoli parametr u ∈ ⟨u 0 , u m )rovna 1.m−p−1∑︁i=0N p i(u) = 1 (2.85)∙ S výjimkou bázové funkce druhého stupně má každá bázová funkce právě jedenextrém.∙ Nejvyšší stupeň křivky je roven počtu kontrolních bodů mínus 1.p ≦ m − p − 1 (2.86)∙ Libovolná afinní transformace kontrolních bodů má stejný efekt, jako aplikacetéže transformace na všechny body křivky.∙ Celá křivka se nachází v interiéru konvexního obalu jejich kontrolních bodů.


2.11 NURBS křivky a plochy 83P 0 P 5P 2 = P 3 = C( 1 2 )C( 1 4 ) C( 3 4 )P 1 P 4Obr. 2.21: Kvadratická křivka s dvojnásobným řídícím bodem P 2 = P 3 a uzlovýmvektorem (0, 0, 0, 1, 1, 3 , 1, 1, 1)4 2 4DerivaceVztah pro výpočet k-té derivace B-spline křivky získáme snadno pomocí derivacebázové funkce (2.82)d kn∑︁C(u) =duk i=0d kP idu N p k i (u) . (2.87)Ukázku derivací B-spline křivky si lze prohlédnout na obr. 2.24.2.11.4 Konvexní obal B-spline křivekTvrzení o vlastnostech konvexního obalu je v případě B-spline křivek silnější, nežje tomu u Bézierových křivek. Pro B-spline křivku stupně p platí, že bod křivkyleží uvnitř konvexního obalu p + 1 okolních bodů. Tudíž všechny body B-splinekřivky musí ležet uvnitř sjednocení všech konvexních obalů vytvořených kolem p + 1následujících vrcholů řídícího polygonu. Na obr. 2.25 lze vidět ukázky konvexníchobalů křivek různých stupňů se shodnými řídícími body.2.11.5 Plocha jako tenzorový součin dvou křivekPřed následující kapitolou si ujasněme klíčový pojem nutný k přechodu od křivekk plochám, a tím je tenzorový součin. Tenzorový součin dvou množin, např. {1, 2, 3}a {x, y}, je opět množina všech dvojic, tedy v našem případě {(1, x), (1, y), (2, x), (2, y), (3, x), (2, y)}.Podobně je tomu v případě následujících ploch, jejichž nové bázové funkce dvou parametrůu a v jsou výsledkem součinu páru B-spline bázových funkcí jedné proměnné.


84 Křivky a plochy v počítačové grafice2.11.6 Neracionální B-spline plochyNeracionální B-spline plochy jsou často využívány v oblastech, které vyžadují reprezentacihladkých a plynule navazujících ploch. Takovéto plochy jsou typické prooblasti designu, automobilového, leteckého či loďařského průmyslu. B-spline plochaje definována jako následující tenzorový součinS(u, v) =kde uzlové vektory u a v tvarun∑︁i=0m∑︁j=0P i,j N p i (u)N q j (v) , (2.88)u = (a, . . . , a, u⏟ ⏞ p+1 , . . . , u r−p−1 , b, . . . , b)⏟ ⏞p+1p+1v = (c, . . . , c, u⏟ ⏞ q+1 , . . . , u s−q−1 , d, . . . , d)⏟ ⏞q+1q+1čítají celkem r + 1, resp. s + 1 uzlů. Síť řídících bodů P i,j tvoří pravidelnou mřížkuo rozměrech (n + 1) × (m + 1). Vzájemný vztah mezi počtem kontrolních bodův pravidelné mřížce a délkou uzlových vektorů je dán následujícími předpisyr = n + p + 1 a s = m + q + 1 .Při praktickém použití se často setkáme s normovaným tvarem uzlového vektoru,např. (0, 0, 1, 2, 3, 4, 4) = (0, 0, 1 4 , 1 2 , 3 4 , 1, 1). Pak pro krajní uzly platí, že u 0 = 0a u m = 1, přičemž relativní rozložení jednotlivých vnitřních uzlů zůstává zachováno.Nyní uveďme některé základní vlastnosti tenzorového součinu bázových funkcí,které vychází z již uvedených vlastností jednotlivých bázových funkcí jedné proměnné.∙ Obě bázové funkce N p i (u) a N q j (v) jsou nezáporné, a tedy i jejich součin jenezápornýN p i (u)N q j (v) ≧ 0 . (2.89)∙ Součet všech bázových funkcí je v daném bodě parametrického prostoru roven1n∑︀i=0 j=0m∑︀N p i (u)N q j (v) = 1 pro všechny (u, v) ∈ ⟨a, b) × ⟨c, d) . (2.90)∙ Součin bázových funkcí mimo meze parametrického prostoru je nulovýn∑︀i=0 j=0m∑︀N p i (u)N q j (v) = 0 pro všechny (u, v) /∈ ⟨a, b) × ⟨c, d) . (2.91)


2.11 NURBS křivky a plochy 85∙ Pro všechny množiny ⟨u i0 , u i0 +1) × ⟨v j0 , v j0 +1) platí, že nejvýše (p + 1) (q + 1)bázových funkcí je nenulových, konkrétně se jedná o funkceN p i (u)N q j (v) ≧ 0 pro i 0 − p ≦ i ≦ i 0 a j 0 − q ≦ j ≦ j 0 . (2.92)∙ Je-li p > 0 a q > 0, pak N p i (u)N q j (v) nabývá právě jedno maximum.Nyní se můžeme podívat alespoň na některé vlastnosti neracionálních B-splineploch.∙ Je-li n = p, m = q, u = (0, . . . , 0, 1, . . . , 1) a v = (0, . . . , 0, 1, . . . , 1), pakS(u, v) je Bézierova plocha.∙ Plocha prochází (interpoluje) čtyři rohové body mřížky řídících vrcholů:S(a, b) = P 0,0 , S(b, c) = P n,0 , S(a, d) = P 0,m a S(b, d) = P n,m , což plynez identityN p 0 (a)N q 0 (c) = N p n(b)N q 0 (c) = N p 0 (a)N q m(d) = N p n(b)N q m(d) = 1 . (2.93)∙ Chceme-li aplikovat afinní transformaci na plochu S(u, v), stačí transformovatpouze řídící vrcholy.∙ Je-li (u, v) ∈ ⟨u i0 , u i0 +1) × ⟨v j0 , v j0 +1), pak bod S(u, v) leží uvnitř konvexníhoobalu řídících bodů P i,j , kde i 0 − p ≦ i ≦ i 0 a j 0 − q ≦ j ≦ j 0 .∙ Triangulovaná síť řídících bodů tvoří po částech planární aproximaci povrchua stejně jako v případě křivek (viz. obr. 2.25) platí, že čím je nižší stupeňplochy, tím je aproximace lepší.∙ Díky lokalitě bázových funkcí se změna polohy řídícího bodu P i,j projeví pouzev podoblasti ⟨u i , u i+p+1 ) × ⟨v j , v j+q+1 ) parametrického prostoru.DerivaceParciální derivace neracionálních B-spline ploch až do řádu d včetně je možno získatpodle vztahukde 0 ≦ k + l ≦ d.∂∂ k+ln∑︁S(u, v) =∂∂u k ∂∂vl i=0m∑︁j=0d kP i,jdu N p dlk i (u)dv N q l j (v) , (2.94)


86 Křivky a plochy v počítačové grafice2.11.7 Racionální B-spline křivky (NURBS)V této podkapitole definujeme racionální zobecnění B-spline forem. Jedná se o B--spline v projektivním rozšíření euklidovského prostoru. Zkratka NURBS znamenáneuniformní racionální B-spline (ang. NonUniform Rational B-Spline) křivky a povrchy.To, že je křivka či plocha neuniformní znamená, stejně jako v předchozíchpřípadech, že jednotlivé uzly nemusí být rozloženy v rámci uzlového vektoru rovnoměrně.Racionalita přináší možnost specifikovat váhu každého řídícího bodu, což dálerozšiřuje možnosti manipulace s podobou výsledné křivky nebo plochy. RacionálníB-spline plocha je jednotná matematická reprezentace schopná popsat běžné analyticképlochy jakými jsou roviny, kónické plochy zahrnující kulové plochy, všechnyregulární kuželosečky, kvadriky, volné plochy, případně komplikované obráběné povrchy.Např. Bézierovy křivky umožňují popis parabol, ale další kuželosečky je jimimožné nahradit pouze přibližně. V podstatě se jedná o průmyslový standard v oblastinávrhu a reprezentace ploch tzv. A třídy. Mezi zásadní výhody patří:∙ Jednotná u flexibilní forma pro reprezentaci široké škály tvarů.∙ Numericky robustní a poměrně rychlé algoritmy pro výpočet bodů a derivací.∙ Invariantní vůči afinní i perspektivní transformaci.∙ Jsou zobecněním neracionálních B-spline a neracionálních i racionálních Bézierovýchkřivek a ploch.∙ Neracionální B-spline nebo Bézierovy křivky mohou aproximovat kružnice, alenelze je jimi reprezentovat přesně. Pomocí racionálních spline lze reprezentovatjakoukoli kuželosečku, ačkoli tato reprezentace není jedinečná.NURBS křivka řádu p je na intervalu u ∈ ⟨a, b) definována následovněC(u) =n∑︁P i w i N p i (u)i=0, (2.95)n∑︁w i N p i (u)i=0kde P i je n + 1 vrcholů řídícího polygonu, w i >= 0 jsou váhy přidružené k jednotlivýchbodům a N p i (u) jsou bázové funkce stupně p definované nad parametrizacíneperiodickým a neuniformním uzlovým vektorem tvaruu = (a, . . . , a, u⏟ ⏞ p+1 , . . . , u m−p−1 , b, . . . , b) ,⏟ ⏞p+1p+1čítajícího m + 1 uzlů. Pomocí racionálních bázových funkcí


2.11 NURBS křivky a plochy 87R p i (u) =w iN p in∑︁(u)(2.96)w i N p i (u)i=0můžeme rovnici (2.95) přepsat do následujícího tvaruC(u) =n∑︁i=0P i R p i (u) . (2.97)Význam váhy w i spočívá v možnosti řídit míru vlivu bodu P i na výsledný průběhkřivky. Neformálně řečeno, čím je váha větší, tím se křivka více přimyká k příslušnémuřídícímu bodu. Čím je hodnota váhy nižší, tím má na výslednou podobukřivky menší vliv. V případě, že je váha nulová, je bod z výpočtu zcela vypuštěn.Váha může být také záporná, mnohé nástroje však tuto možnost vůbec nepodporují.Dochází k porušení vlastností konvexního obalu, bod křivky může ležetmimo něj. Jelikož lze váhy w i bodů P i reprezentovat pomocí homogenních souřadnicPiw = (w i x i , w i y i , w i z i , w i ), lze na racionální NURBS křivku nahlížet jako na neracionálníB-spline křivku ve 4-dimenzionálním prostoru. Ke každému bodu Piw v homogenníchsouřadnicích lze nalézt korespondující bod v 3D euklidovském prostoru pomocíperspektivního mapování H : (wx, wy, wz, w) → (wx/w, wy/w, wz/w, w/w) == (x, y, z, 1) ≡ (x, y, z) ∈ R 3 . Vztah (2.95) můžeme upravit do podobya obdobně můžeme získat z (2.87)C w (u) =n∑︁i=0Pi w N p i (u) (2.98)d kdu k Cw (u) =n∑︁i=0Racionální křivku obdržíme zpět pomocí HC(u) = H {C w (u)} = HP wid kdu N p k i (u) . (2.99){︃ n∑︁i=0P wi N p i (u) }︃. (2.100)DerivaceDerivace racionálních funkcí jsou poněkud komplikovanější. Zaveďme následující značeníC(u) = w(u)C(u)w(u)= A(u)w(u) , (2.101)kde vektorová funkce A(u) = ⟨x w (t), y w (t), z w (t)⟩ je tvořena prvními třemi složkamiC w (u), tedy


88 Křivky a plochy v počítačové graficeA(u) =n∑︁N p i (u)w iP i (2.102)i=0a funkce w(u) reprezentuje homogenní souřadniciw(u) =n∑︁N p i (u)w i . (2.103)i=0První derivaci vypočteme z (2.101) pomocí vzorce pro derivaci podílu a po úpravěobdržímedw(u) ddu C(u) = du A(u) − ddu w(u)A(u)w(u) 2=(︂ dw(u)du A(u) − d )︂du w(u)C(u)w(u) 2(2.104)=ddu A(u) − ddu w(u)C(u),w(u)kde obecně k-tou derivaci funkce A(u) vypočteme snadno s pomocí (2.82)d kn∑︁A(u) =duk i=0a obdobně získáme také derivace funkce w(u)d kn∑︁w(u) =duk i=0d kdu k N p i (u)w iP i (2.105)d kdu k N p i (u)w i . (2.106)Pro vyjádření vztahu pro derivace k-tého řádů křivky C(u) využijeme rovnostA(u) = w(u)C(u) z (2.101) a Leibnizův vzorec (derivace součinu dvou funkcí)d kdkk∑︁A(u) = (w(u)C(u)) =duk duk k∑︁= w(u) dkC(u) +duk z čehož přímo plyne hledaná derivacei=1i=0(︂ ki)︂ di(︂ ki)︂ diduiw(u)dk−iC(u)duk−i (2.107)dk−iw(u)dui du C(u) , k−i


2.11 NURBS křivky a plochy 89dd kC(u) =duk kk∑︁A(u) −duk i=1(︂ ki)︂ diduw(u)iw(u)dk−iC(u)duk−i . (2.108)V praxi se nejčastěji zajímáme o první a druhou derivaci. První derivaci mámejiž vyjádřenou rovnicí (2.104). Druhou derivaci získáme položením k = 2 v obecnémvztahu (2.108) a obdržímed 2d 2du C(u) = du A(u) − 2 d2 du w(u) d d2C(u) −du du w(u)C(u)2 . (2.109)2 w(u)2.11.8 Racionální B-spline plochy (NURBS)V této kapitole se konečně dostáváme k NURBS plochám, které definujeme obdobnýmzpůsobem jako tomu bylo u neracionálních ploch na základě tenzorovéhosoučinu racionálních B-spline křivek z předchozí kapitoly. NURBS plocha stupně pve směru u a stupně q ve směru v je na intervalu (u, v) ∈ ⟨a, b) × ⟨c, d) po částechracionální vektorová funkce dvou proměnnýchS(u, v) =n∑︁i=0n∑︁i=0m∑︁P i,j w i,j N p i (u)N q j (v)j=0, (2.110)m∑︁w i,j N p i (u)N q j (v)j=0kde P i,j je síť (n + 1) × (m + 1) vrcholů řídící mřížky, w i,j jsou váhy přidruženék jednotlivých bodům (jejich význam je obdobný jako v případě NURBS křivek)a N p i (u), resp. N q j (v) jsou B-spline bázové funkce stupně p, resp. q definované nadparametrizací neperiodickými a neuniformními uzlovými vektory tvaruu = (a, . . . , a, u⏟ ⏞ p+1 , . . . , u r−p−1 , b, . . . , b)⏟ ⏞p+1p+1v = (c, . . . , c, u⏟ ⏞ q+1 , . . . , u s−q−1 , d, . . . , d)⏟ ⏞q+1q+1kde r = n + p + 1 a s = m + q + 1. Zavedením po částech racionální bázové funkceR p,qwi,j (u, v) =lze rovnici (2.110) přepsat do tvarui,j N p i (u)N q j (v)(2.111)n∑︁ m∑︁w i,j N p k (u)N q l (v)i=0 j=0


90 Křivky a plochy v počítačové graficeS(u, v) =n∑︁i=0m∑︁j=0P i,j R p,qi,j (u, v) . (2.112)Vlastnosti racionálních bázových funkcí R p,qi,j (u, v) plynou z již zmíněných vlastnostíneracionálních bázových funkcí N p i (u) a N q j (v), a proto se jimi nemusíme natomto místě znovu detailněji zabývat, jen připomeňme, že se jedná o nezápornost,normalizovaný tvar, lokalitu, podmínku existence právě jednoho extrému, interpolacerohových bodů mřížky. Zmínit však můžeme jednu novou vlastnost.∙ Jsou-li všechny váhy w i = a a a ≠ 0, pak R p,qi,j (u, v) = N p i (u)N q j (v) pro všechnyi, j.Nyní přímo navážeme některými vlastnostmi NURBS ploch.∙ Předpokládejme, že w i,j ≧ 0 pro všechna i, j a (u, v) ∈ ⟨u i0 , u i0 +1)×⟨v j0 , v j0 +1),pak se pro i 0 −p ≦ i ≦ i 0 a j 0 −q ≦ j ≦ i 0 bod S(u, v) nachází uvnitř konvexníobálky řídících bodů P i,j .∙ NURBS jsou invariantní vůči afinní i perspektivní transformaci.∙ Změní-li se poloha bodu P i,j nebo váha w i,j , projeví se změna tvaru plochypouze v rámci parametrické oblasti ⟨u i , u i+p+1 ) × ⟨v j , v j+q+1 ).∙ Neracionální B-spline a neracionální i racionální Bézierova plocha jsou speciálnípřípady NURBS ploch.∙ NURBS plocha S(u, v) je (p−k)-krát, resp. (q−k)-krát spojitě diferencovatelnáv uzlovém bodě u, resp. v o násobnosti k.Jelikož lze váhy bodů reprezentovat pomocí homogenní souřadnice tak že, P wi == (w i x i , w i y i , w i z i , w i ), lze na NURBS plochu nahlížet jako na neracionální plochuve 4-dimenzionálním prostoru a vztah (2.110) můžeme upravit do podobyS w (u, v) =n∑︁i=0m∑︁j=0Pi,jN w p i (u)N q j (v) . (2.113)kde S w (u, v) je bod na ploše v homogenních souřadnicích a platíS(u, v) = H {S w (u, v)} . (2.114)Poznamenejme, že S w (u, v) je po částech polynomiální (neracionální) plocha v 4--rozměrném prostoru.


2.11 NURBS křivky a plochy 91DerivaceDerivace racionálních funkcí jsou komplikovanější. V předchozí kapitole jsme odvodiliderivace k-tého řádu pro racionální B-spline křivky (2.108). Obdobným postupemmůžeme dojít také k předpisu pro výpočet parciálních derivací NURBS plochy.Vzhledem k tomu, že se jedná o poměrně zdlouhavé odvození, omezíme se zde pouzena uvedení výsledného vztahu(︃∂∂ k+l∂∂u k ∂∂v S(u, v) = 1 ∂∂ k+lA(u, v)l w(u, v) ∂∂u k ∂∂vl −−−k∑︁(︂ k ∂∂ii)︂i=1l∑︁(︂ l ∂∂jj)︂j=1k∑︁(︂ )︂ kii=1∂∂k−i+lw(u, v) S(u, v)∂∂ui ∂∂u k−i ∂∂vl ∂∂k+l−jw(u, v) S(u, v)∂∂vj ∂∂u k ∂∂vl−j l∑︁j=1(︂ )︃l ∂∂i+j∂∂k−i+l−jw(u, v)j)︂∂∂u i ∂∂vj ∂∂u k−i ∂∂v S(u, v) .l−j(2.115)Závěrem se ještě pokusme vyjádřit z rovnice (2.115) následující často používanéparciální derivace(︃∂∂ 2∂∂u∂∂v S(u, v) = 1w(u, v)∂∂ 2A(u, v) −∂∂2∂∂u∂∂vw(u, v)S(u, v)∂∂u∂∂v)︃− ∂∂∂∂u w(u, v) ∂∂ ∂∂v S(u, v) − ∂∂ ∂∂w(u, v)∂∂v ∂∂u S(u, v) ,(2.116)(︃∂∂ 2∂∂u S(u, v) = 1 ∂∂ 2∂∂ ∂∂A(u, v) − 2 w(u, v) S(u, v)2 w(u, v) ∂∂u2 ∂∂u ∂∂u− ∂∂2∂∂u 2 w(u, v)S(u, v) )︃,(2.117)


92 Křivky a plochy v počítačové grafice(︃∂∂ 2∂∂v S(u, v) = 1 ∂∂ 22 w(u, v) ∂∂v A(u, v) − 2 ∂∂ 2 ∂∂v w(u, v) ∂∂ S(u, v)∂∂v− ∂∂2∂∂v 2 w(u, v)S(u, v) )︃.(2.118)


2.11 NURBS křivky a plochy 93a)b)Obr. 2.22: Příklady kubických křivek s dvojnásobným řídícím bodem P 2 = P 3


94 Křivky a plochy v počítačové graficeObr. 2.23: Kubická B-spline křivka s uzlovým vektorem (0, 0, 0, 0, 1, 1, 1, 1) nebotaké kubická Bézierova křivka jakožto speciálním případdC(0) dud 2du 2 C(3)dC(3) duC(1)d 3du 3 C(1)d 3du 3 C(0)d2 C(1)du 2P 0 = C(0)dC(1) dud 3du 3 C(3)d 2du 2 C(2)P 5 = C(3)d 3du 3 C(2)C(2)d 2du 2 C(0)dC(2) duObr. 2.24: Kubická B-spline křivka s uzlovým vektorem (0, 0, 0, 0, 1, 2, 3, 3, 3, 3).První, druhá a třetí derivace jsou vypočteny pro parametry u ∈ {0, 1, 2, 3}. Délkyvektorů jednotlivých stupňů derivací jsou upraveny koeficienty 0.5, 0.25 a 0.08


2.11 NURBS křivky a plochy 95a)b)c)Obr. 2.25: Konvexní obal B-spline křivky stupně a) p = 1, b) p = 2 a c) p = 5.Všimněte si, že v případě křivky stupně 1 je konvexní obálka totožná s řídícímpolygonem


96 Křivky a plochy v počítačové graficeP 0,4P 4,4zyPx0,0P 4,0Obr. 2.26: Kvadratický × kubický B-spline povrch. Příslušné bázové funkce jsou parametrizoványuzlovými vektory u = (0, 0, 0, 1, 2, 3, 3, 3) a v = (0, 0, 0, 0, 1, 2, 2, 2, 2).Řídící síť obsahuje 5 × 5 bodů


2.11 NURBS křivky a plochy 97P 0,3S vS uzP 3,3S uvP 0,0P 3,0yxS uuS vvObr. 2.27: Bikubická B-spline plocha nad uzlovými vektory u = v == (0, 0, 0, 1, 1, 1, 1). Řídící síť obsahuje 4 × 4 bodů. Zobrazené parciální derivacejsou vypočteny v bodě S(0.5, 0.3)


98 Křivky a plochy v počítačové graficeC(1)w 3 = 1d 3du 3 C(1)d 3du 3 C(2)d 2du 2 C(1)d 2C(2)du 2w 3 = 10dC(1) duP 3dC(2) duObr. 2.28: Racionální kubická B-spline křivka s uzlovým vektorem(0, 0, 0, 0, 1, 2, 3, 3, 3, 3). Váha řídícího bodu P 3 nabývá pro každou křivku postupněhodnoty {1, 1.4, 2, 3, 5, 10}, ostatní váhy jsou pevně nastaveny na hodnotu 1.Čárkovaná křivka je ekvivalentní s neracionální B-spline křivkou z obr. 2.24. Délkyvektorů jednotlivých stupňů derivací vypočtených podle (2.108) jsou upravenykoeficienty 0.5, 0.25 a 0.08


99Kapitola 3Modelování tělesModelování těles je v počítačové grafice úlohou zásadní důležitosti. Práce s tělesy(byť různého technického významu) je také společnou vlastností mnoha CAD systémůpro strojírenství, stavebnictví atd. Existence trojrozměrného modelu umožňujezískat jakoukoli geometrickou informaci o vytvářeném objektu. Lze např. získat informacepro libovolné zobrazení objektu včetně řezů. Lze vypočítat takové charakteristikyjako jsou objem, hmotnost, poloha těžiště, momenty a poloměry setrvačnostiatd. Dále může trojrozměrný model sloužit k automatizované přípravě zadání provýpočty metodou konečných prvků. S využitím trojrozměrného modelu lze též uvažovato automatizovaném rozpoznávání tvarů vzniklých v průběhu modelování -geometrický model se tak může stát východiskem pro systémy CAD s jistými prvkyinteligence.Modelování těles zabezpečují systémy resp. podsystémy, které bývají nazýványobjemovými modeláři (solid modelery). Problematika modelování těles (reprezentacetěles v počítači) a realizace odpovídajících modelářů tvoří významnou oblastpočítačové <strong>grafiky</strong>, která se vyvinula v samostatné odvětví. Počátky vývoje tétooblasti spadají přibližně do sedmdesátých let dvacátého století. Od té doby bylo dosaženopozoruhodných výsledků, které do značné míry podmínily rozmach systémůCAD. Přesto však nelze vývoj v této oblasti zatím považovat za zcela uzavřený.V této kapitole se budeme problematikou objemového modelování zabývat podrobněji.Ze známých metod modelování se zaměříme zejména na dvě z nich, a to nareprezentaci těles pomocí povrchu (boundary representation) a na tzv. konstruktivnígeometrii těles (constructive solid geometry). Vždy se též budeme zabývat řešenímproblémů vyvolaných potřebou provádět výpočty (např. zobrazení, booleovské operace)nad modely uvedených typů.Ještě dřív, než se pustíme do řešení uvedených praktických problémů, musíme senejprve věnovat otázce, co považujeme za těleso. Namítnete, že to je jasné. Víte tovšak pravděpodobně jen intuitivně. To pro počítačové zpracování nestačí, protožepočítač vaši intuici nemá. Teoretický úvod se může čtenáři zdát poněkud nepříjemný.Pro řádné pochopení problematiky je však alespoň nějaká znalost v tomto ohledunezbytná. Věříme, že cílevědomý čtenář jistě nalezne dost síly k tomu, aby úvodní


100 Modelování tělespodkapitoly „přežil“. Závěry z teoretického úvodu využijeme později, a to zejménapři popisu těles pomocí hraniční reprezentace.3.1 Topologické prostory a topologická ekvivalenceChceme-li se seriózněji zabývat problémem, jak je možné definovat a popisovat tělesa,sotva se můžeme obejít bez pojmů jako je topologický prostor, topologické zobrazenía n-manifold v E m . Uvedené pojmy zavedeme v této podkapitole. Poznamenáváme,že se jedná o vcelku rozsáhlou a náročnou partii matematiky. My se zde protomusíme spokojit jen se základními informacemi a terminologií, které budeme pozdějivyužívat.Topologický prostor je množina X spolu se systémem svých podmnožin τ. Systémτ musí splňovat následující axiomy: 1) ∅ ∈ τ, X ∈ τ; 2) průnik konečného počtumnožin z τ musí být opět v τ; 3) sjednocení libovolného počtu množin (i nespočetného)z τ je opět v τ. Systém τ množin tedy musí být uzavřený vůči konečnémuprůniku a libovolnému součtu (a to i s nespočetným počtem prvků). Souboru τ říkámetopologie na X. Množiny v τ pak nazveme otevřené množiny a jejich doplňkyv X uzavřené množiny. Topologický prostor budeme značit (X, τ).Podmnožinu U ⊂ X topologického prostoru (X, τ) nazveme okolím bodu p, pokudexistuje prvek O ∈ τ takový, že p ∈ O a platí O ⊂ U. Okolí bodu p budeme značitU(p). Zobrazení f topologického prostoru (X, τ) do topologického prostru (X ′ , τ ′ )je spojité, jestliže obraz každého okolí bodu p v (X, τ) je současně také okolím boduf(p) v (X ′ , τ ′ ).Jestliže f je bijekcí a f i f −1 jsou spojitá zobrazení, pak se f nazývá homeomorfizmem(topologickým zobrazením). Dva topologické prostory jsou topologickyekvivalentní, jestliže mezi nimi existuje homeomorfizmus. Homeomorfismus je vzájemnějednoznačné zobrazení mezi topologickými prostory, které zachovává topologickévlastnosti. Z pohledu topologie mají tedy oba prostory stejné vlastnosti (jsoustejné). Homeorfismus má pro definici pojmu těleso zásadní význam (má ale také význampři definici pojmů jako je křivka či plocha). Obr. 3.1 ukazuje několik praktickyvýznamných příkladů homeomorfismu.Při popisu těles, a to zejména jejich hranice, využijeme pojmu n-manifold v E m(konkrétně zejména 2-manifold v E 3 ). Seznámíme se proto s tímto pojmem podrobněji.N-manifold v E m , kde m ≧ n, je taková podmnožina E m , která je homeomorfnís E n . V tomto případě bychom mohli ještě doplnit, že se jedná o tzv. manifold bezhranice. N-manifold v E m s hranicí je pak podmnožina E m , která je homeomorfnís pozitivním poloprostorem E n+ = {(x 1 , . . . , x n ) ∈ E n |x 1 ≧ 0}. Praktický dopadukazuje obr. 3.2. Jako těleso uvažujeme kouli. Hranicí tělesa je kulová plocha. Kulováplocha je 2-manifoldem v E 3 . Obr 3.2 přímo ukazuje homeomorfismus prokazujícíuvedené tvrzení.Právě uvedenou definici by bylo dále možné poněkud modifikovat, a to takto: N--manifold v E m , je taková podmnožina E m , v níž okolí každého bodu je homeomorfní


3.2 Soubor simplexů 101Obr. 3.1: Některé prakticky zajímavé příklady homeomorfismu: Křivka v E 3 je homeomorfnís intervalem v R; plocha je homeomorfní s oblastí v R 2 ; úsečka je topologickyekvivalentní křivce; trojúhelník je ekvivalentní kruhu; čtyřstěn je ekvivalentní kouli.Obr. 3.2: Kulová plocha jako 2-manifold v E 3 ; homeomorfismem je zde projekcebodů kulové plochy z bodu S na rovinu E 2 .s E n případně s E n+ . Pokuste se sami promyslet důsledky této modifikace; kteroupozději využijeme.Příklad 3.1. Protože kruh je homeomorfní s E 2 , můžeme také říci, že 2-manifold bezhranice v E 3 je taková množina bodů v E 3 , v níž je okolí každého bodu homeomorfnís kruhem. Jak uvidíme později, je toto tvrzení názorné praktické.☞3.2 Soubor simplexůVysvětleme dále, jak lze pojem těleso a jeho hranici zavést kombinatoricky. Je tozajímavé i praktické zároveň. Při troše trpělivosti čtenář jistě shledá, že všechnypojmy, které jsou zde zavedeny, plně odpovídají intuitivní představě, že povrch tělesalze pokrýt trojúhelníkovou sítí nebo že celé těleso lze vyplnit čtyřstěny (trojúhelníki čtyřstěn zde ale chápeme z pohledu topologické ekvivalence; hrany ani stěny nemusíbýt rovinné). Jen snaha o určitou formální preciznost a systematičnost se snad můžezdát při prvním čtení poněkud nepřátelská. Jestliže si ale čtenář během čtení výkladubude jeho obsah současně také zakreslovat, jistě tuto potíž snadno překoná.


102 Modelování tělesNechť p 0 a p 1 jsou dva různé body. Jejich konvexní kombinací je množina ⟨p 0 , p 1 ⟩ == {λp 0 + (1 − λ)p 1 |0 ≦ λ ≦ 1}. Z geometrického pohledu je ⟨p 0 , p 1 ⟩ úsečka. Podobněmůžeme definovat konvexní kombinaci d + 1 bodů vztahem ⟨p 0 , . . . , p d ⟩ =∑︀= { d λ k p k |λ k ≧ 0, ∑︀ λ k = 1}. Koeficienty λ k v předchozím výrazu se nazývajík=1barycentrické souřadnice. Řekneme, že body jsou lineárně nezávislé, jestliže žádnýz nich není obsažen v konvexní kombinaci zbývajících. Jestliže p k je množina lineárněnezávislých bodů, pak jsou barycentrické souřadnice každého bodu v ⟨p 0 , . . . , p d ⟩ jedinečné.Pojmem d-simplex rozumíme konvexní kombinaci d+1 lineárně nezávislých bodů,d je pak dimenzí simplexu. Je zřejmé, že 0-simplex je bod, 1-simplex je úsečka, 2--simplex je trojúhelník, 3-simplex je čtyřstěn atd. Hranice d-simplexu (nazvěme jiS) sestává ze všech (d − k)-simplexů obsažených v S, kde 0 < k ≦ d. Každý simplexhranice budeme dále nazývat stěnou, k-simplex, který je součástí hranice, pak takék-stěnou. Není obtížné ověřit následující tvrzení: 1) každý d-simplex má právě (︀ )︀d+1k+1k-simplexů, které jsou jeho k-stěnami; 2) každé dva d-simplexy jsou homeomorfní.Soubor simplexů (označme jej C) je konečná množina simplexů vyhovující následujícímpodmínkám: 1) Nechť S je simplex a S ′ jeho libovolná stěna. Je-li S ∈ C,pak musí také být S ′ ∈ C. 2) Nechť S 1 a S 2 jsou dva simplexy z C. Pak průnik S 1 ,S 2 je buď prázdný nebo musí být opět simplexem z C. Dimenze souboru simplexůje definována jako maximum dimenze jednotlivých simplexů, které jsou v souboruobsaženy. Dimenze simplexu je invariantní vůči spojitému zobrazení. Jestliže S jed-simplex a d > 0, pak hranice S je soubor simplexů dimenze d − 1.Podmnožina E n je triangulovatelná, jestliže je homeomorfní se souborem simplexů.Triangulovatelná množina je také nazývána topologickým mnohostěnem. Poznamenejme,že tohoto termínu zde není užito v geometrickém smyslu. Nemusíme sitedy představovat skutečný mnohostěn, na jaký jsme byli doposud zvyklý, protožehomeomorfizmus může zobrazovat lineární útvary do zakřivených. Tak např. koulev E 3 je také topologický mnohostěn, protože je homeomorfní s 3-simplexem.Nechť S je d-simplex. Vlastní podmnožina {q 0 , . . . , q r } množiny vrcholů simplexuS definuje r-simplex S 1 , který je stěnou S. Nechť {q r+1 , . . . , q d } jsou zbývající vrcholyS. Tyto vrcholy definují další stěnu S 2 . Stěny S 1 a S 2 nazýváme protilehlými. NechťS a S ′ jsou simplexy v souboru simplexů. S, S ′ nazveme přilehlými, jestliže obaobsahují tutéž stěnu S ′′ . Řekneme také, že S a S ′ incidují s S ′′ . Soubor simplexů Cnazveme souvislým, jestliže pro každou dvojici S, S ′ z C lze v C nalézt posloupnostsimplexů S 1 , . . . , S r tak, že S = S 1 , S ′ = S r a pro 1 ≦ k < r S k inciduje s S k+1 neboS k je stěnou S k+1 . Dále nechť S je simplex v souboru simplexů C. Předpokládejme,že s S inciduje s konečná množina simplexů {S 1 , . . . , S r } v C (pro každý incidujícísimplex je S jeho stěnou). Nechť T i je stěna simplexu S i protilehlá stěně S. Množinuvšech protilehlých stěn T i (1 ≦ i ≦ r) nazveme link S.Nyní již můžeme definovat 2 a 3-manifoldy v E 3 s využitím souboru simplexů:2-manifold v E 3 bez hranice je homeomorfní se souborem simplexů C dimenze 2splňujícím následující podmínky: 1) s každým 1-simplexem v C incidují právě dva


3.3 Tělesa s hranicí 2-manifold v E 3 1032-simplexy; 2) link každého 0-simplexu v C je kružnicí (triangulací kružnice). 3--manifold v E 3 bez hranice je homeomorfní se souborem simplexů C dimenze 3splňujícím následující podmínky: 1) s každým 2-simplexem v C incidují právě dva3-simplexy; 2) link každého 0-simplexu v C je triangulací kulové plochy. (Poznamenejme,že z hlediska modelování těles je 3-manifold v E 3 útvarem poněkud nepraktickým.Uvádíme jej ale pro úplnost.) Při popisu 3-manifoldu E 3 s hranicí jetřeba rozlišovat simplexy ležící na hranici a simplexy ležící uvnitř. Nechť je např. S2-simplex souboru simplexů C. S je vnitřní stěnou, jestliže inciduje právě se dvěma3-simplexy z C, nebo je stěnou na hranici, jestliže inciduje právě s jediným 3-simplexemz C. Podobně 0-simplex je vnitřní, jestliže je jeho link triangulací kulovéplochy, nebo leží na hranici, jestliže je jeho link triangulací kružnice. Můžeme tedyshrnout, že 3-manifold v E 3 s hranicí je homeomorfní se souborem simplexů C splňujícímnásledující podmínky: 1) s každým 2-simplexem z C incidují jeden nebodva 3-simplexy z C; 2) link každého 0-simplexu je triangulací kružnice nebo kulovéplochy.3.3 Tělesa s hranicí 2-manifold v E 3Intuitivně uvažujeme tělesa jako celek - tj. trojdimenzionální objekt s vnitřkema s hranicí. V hraniční reprezentaci těles, jak později uvidíme, máme však k dispozicipouze hranici Je proto nutné studovat vztahy mezi vlastnostmi tělesa a vlastnostmijeho hranice. Přesněji lze říci, že předpokládáme, že pracujeme s tělesy 3-manifoldv E 3 s hranicí. Hranice takového tělesa je 2-manifold v E 3 . Chceme zjistit, jakévlastnosti, kterých lze prakticky využít při implementaci na počítači, má 2-manifold(v E 3 ), který tvoří hranici tělesa. Důležité vlastnosti jsou následující.Orientovatelnost: Orientovatelnost (což je schopnost „být orientován“) nejnázornějipřiblížíme prostřednictvím triangulace manifoldu. Pojem orientovatelnosti 2-manifolduE 3 lze tedy vysvětlit pomocí orientace souboru simplexů, který je triangulacímanifoldu. 2-simplex orientujeme cyklickým uspořádáním vrcholů. Např. simplex⟨p 0 , p 1 , p 2 ⟩ může být orientován dvěma způsoby, a to buď p 0 , p 1 , p 2 nebo p 0 , p 2 ,p 1 . Orientace 2-simplexu indukuje také orientaci každé z jeho stěn, v našem případě1-simplexů. Nechť S a S ′ jsou dva přilehlé 2-simplexy v souboru simplexů C.Předpokládáme, že oba přiléhají k 1-simplexu S ′′ . Řekneme, že S a S ′ jsou orientoványkonzistentně, jestliže orientace S ′′ indukované orientacemi S a S ′ jsou opačné(obr. 3.3). Soubor simplexů dimenze 2 považujeme za orientovatelný, jestliže všechnynavzájem přiléhající 2-simplexy mohou být orientovány konzistentně.Zjištění, že soubor simplexů a 2-manifold v E 3 tvořící hranici tělesa je orientovatelný,je prakticky významné. Pokud by tomu tak nebylo, nebyla by možnátzv. hraniční reprezentace tělesa v podobě, jak se s ní později seznámíme. Na základědosud uvedeného by také bylo možné zkonstruovat algoritmus pro testováníorientovatelnosti souboru simplexů. Algoritmus začne volbou orientace libovolného2-simplexu. Dále jsou postupně orientovány sousedící 2-simplexy tak, aby jejich ori-


104 Modelování tělesObr. 3.3: Příklad orientace čtyřstěnu: Všechny trojúhelníky (2-simplexy) jsou orientoványtak, že na hranách (1-simplexech) běží orientace proti sobě a je tedy konzistentní.Jsou možné dvě konzistentní orientace. Jedna je vyznačena; druhá by vzniklaotočením směru šipek.entace byla konzistentní. Jestliže se v procesu „šíření orientace“ narazí na 2-simplex,který je již orientovaný a u kterého by orientaci bylo zapotřebí obrátit, pak souborsimplexů není orientovatelný. My ale nyní již víme, že tato situace by u „slušných“těles neměla nastat. Lze snadno ukázat, že 2-manifold v E 3 tvořící hranici tělesa jeorientovatelný právě dvěma způsoby. I toho při praktické implementaci využijeme.Orientaci můžeme zvolit např. tak, abychom při pohledu zevnitř tělesa na jeho stěnu(2-simplex) viděli její vrcholy v pořadí proti směru hodinových ručiček.Dále se věnujme obrácenému problému, kdy bychom chtěli formulovat požadavky,které musí být splněny, aby souvislý a orientovaný 2-manifold v E 3 bez hranice bylomožné považovat za hranici tělesa (přesněji řečeno souvislého 3-manifoldu v E 3s hranicí). K tomu uvedeme několik dalších pojmů a pozorování.Omezená variace: Nechť: M je 3-manifold s hranicí v E 3 . Řekneme, že M vykazujeomezenou variaci, jestliže každá přímka v E 3 protíná M jen v konečně mnoha segmentecha každá rovina v E 3 jen v konečně mnoha oblastech. Analogicky můžemeříci, že kompaktní 2-manifold v E 3 vykazuje omezenou variaci, jestliže jej každápřímka protíná jen v konečně mnoha bodech a každá rovina jen v konečně mnohakřivkách. Je zřejmé, že takovou vlastnost můžeme v běžných případech předpokládat.Pokud bychom měli za úkol představit si nějaké těleso, jistě si představímetakové, které uvedenou podmínku splňuje. Potíže by spíše naopak mohly nastats představením si opačného případu, kdy je útvarů vzniklých protínáním nekonečněmnoho.Vnitřek tělesa: Nechť M je orientovaný, souvislý 2-manifold v E 3 . Bod p nazvemevnitřním bodem, jestliže splňuje následující podmínky: 1) Existuje takový 2-simplexS souboru C, že se jeho vrcholy p 0 , p 1 , p 2 při pozorování z p jeví v pořadí protisměru hodinových ručiček; 2) na S existuje bod q tak, že úsečka pq neprotíná Mjinde než v q. 2-manifold tak rozděluje E 3 na dvě otevřené množiny. Jedna obsahujevšechny vnitřní body tělesa (vnitřek). Druhá obsahuje body, které nenáleží anivnitřku ani nejsou součástí M; jedná se o vnějšek tělesa. Za těleso typu manifolds jedním povrchem považujeme souvislý 3-manifold v E 3 s hranicí. Jeho hranice jekompaktní souvislý 2-manifold bez hranice v E 3 s omezenou variací. Těleso sestává


3.4 Eulerova formule 105z bodů uvnitř a z bodů na hranici. Hranice je orientována tak, aby orientace správněurčovala, které body leží uvnitř tělesa a které leží vně.Konzistentní orientace obálek: K tomu, abychom mohli pracovat s tělesy s více povrchy(můžeme mít např. těleso, uvnitř kterého je dutina), musíme zavést ještěpojem konzistentní orientace obálek (v našem příkladě je jednou obálkou vnější hranicetělesa, druhou obálkou je hranice dutiny). Nechť M 1 a M 2 jsou dva souvislé,orientované a navzájem disjunktní 2-manifoldy v E 3 . Řekneme, že M 1 a M 2 jsouorientovány konzistentně, jestliže jsou orientovány tak, aby obě orientace ukazovalydovnitř tělesa, jak je ukázáno na obr. 3.4 (vnitřek tělesa je vyznačen šrafováním).Obr. 3.4: Konzistentní (vlevo) a nekonzistentní (vpravo) orientace obálek.3.4 Eulerova formulePři praktické implementaci modelerů bývá zapotřebí v průběhu výpočtů kontrolovattopologickou správnost těles. Ke kontrole lze použít Eulerovu formuli, která jenutnou (bohužel však ale nikoli postačující) podmínkou správnosti. Tato formuleříká, že počet stěn, hran a vrcholů tělesa je vázán jistým vztahem. Uvažujme nejprvetělesa, která mají jediný povrch, neprochází jimi žádné díry, neobsahují žádnévnitřní dutiny a každá jejich stěna je homeomorfní s kruhem. Taková tělesa jsouz topologického pohledu nejjednodušší - jsou všechna homeomorfní s koulí. Jestližeoznačíme počet vrcholů V , počet hran E, počet stěn F , pak lze Eulerovu formulipro tato tělesa zapsat ve tvaruV + F = E + 2 . (3.1)Uvažujme dále možnost, že tělesa mají díry (nikoli ale vnitřní dutiny), ale že jsoustále ohraničena jediným souvislým povrchem. Stále také předpokládáme, že každástěna tělesa je homeomorfní s kruhem. Příklad tělesa se dvěma otvory je na obr. 3.5.Tělesa tohoto typu jsou homeomorfní s koulí s jistým počtem „držadel“ (na obr. 3.5je počet držadel 2). Počet držadel se nazývá genus. Pro tělesa, jejichž genus je G,má Eulerova formule tvarV + F = E + 2(1 − G) . (3.2)


106 Modelování tělesObr. 3.5: Těleso ve tvaru krychle se dvěma průběžnými dírami (vlevo) je homeomorfnís koulí se dvěma „držadly“ (vpravo); počet držadel udává hodnota nazývanágenus, která je v tomto případě 2. (Stěny krychle jsou zde záměrně rozděleny diagonálami,aby byly ohraničeny vždy jen jedinou smyčkou. Jinak bychom museli použítsložitější tvar Eulerovy formule, o němž je pojednáno dále v textu.)Dále ještě navíc uvažujme tělesa s vnitřními dutinami. Taková tělesa jsou ohraničenaněkolika oddělenými uzavřenými povrchy. Počet povrchů označme S. Konečnětéž upusťme od požadavku, že každá stěna tělesa je homeomorfní s kruhem (tj., žekaždá stěna je ohraničena jedinou smyčkou hran; na obr. 3.6 je znázorněna stěnaohraničená třemi smyčkami). Označme L celkový počet smyček na plochách tělesaa G součet genů jednotlivých povrchů. Eulerova formule má pak tvarV + F = E + (L − F ) + 2(S − G) . (3.3)Ačkoliv každý povrch typu 2-manifold v E 3 musí splňovat Eulerovu formuli, opakneplatí. Ne každý povrch, který Eulerovu formuli splňuje, je povrchem typu 2-manifoldv E 3 . Obr. 3.6 ukazuje takový případ.Obr. 3.6: Stěna ohraničená více (třemi) smyčkami (vlevo) a těleso (vpravo), kterésice spňuje Eulerovu formuli (F = 6, V = 8, E = 12), ale ve smyslu předchozíchdefinic tělesem není kvůli „trčící“ stěně (také intuitivně určitě máme pochybnosti,zda je těleso v pořádku).3.5 Regularizované booleovské operaceAť se pro modelování těles používá jakéhokoli přístupu, bývá často požadovánamožnost vytvářet nová tělesa aplikací booleovských operací na tělesa již existující.


3.5 Regularizované booleovské operace 107Zpravidla bývá v objemových modelářích k dispozici operace součtu, součinu a rozdílu(∪, ∩, ∖). Předpokládejme nejprve, že tělesa chápeme jako množiny bodů a žezmíněné operace mají význam součtu, součinu nebo rozdílu množin. Pak např. připrovádění operace součinu nad dvěma navzájem se dotýkajícími krychlemi, je výsledkemoperace „těleso“ tvořené pouze společnou částí stěn obou krychlí (obr. 3.7;předpokládáme, že taková společná „vrstva“ bodů existuje). Podobně by bylo možnésnadno ukázat případy, kdy je výsledkem operace úsečka nebo dokonce jediný bod.Taková tělesa však chápeme jako nepatřičná, a to jednak ve smyslu obsahu předchozípodkapitoly, ale také intuitivně. Při implementacích objemových modelářů setato degenerovaná tělesa často vylučují. Požaduje se, aby tělesa vždy měla nenulovýobjem.Obr. 3.7: Vznik útvaru, které není tělesem; průnikem dvou těles vznikla plocha.Zavádí se proto pojem regularizovaná množina a regularizovaná booleovská operace.Regularizace množiny (označme ji A) je definována jako uzávěr vnitřku množinypodle předpisu closure(interior(A)). Množina, která se rovná své vlastní regularizaci,se nazývá regulární. Účinek regularizace je ilustrován na obr. 3.8. Zavedenímregularizace booleovských operací se sleduje, aby výsledkem operací byly pouze regulárnímnožiny. Regularizované operace zde značíme ∪ * , ∩ * , ∖ * . Regularizovanáoperace op * (op je některou z operací {∪, ∩, ∖} ) je definována předpisemA op * B = closure(interior(A op B)) . (3.4)Obr. 3.8: Regularirace tělesa (množiny): nepatřičné stěny trčící vně nebo dovnitřtělesa jsou regularizací odstraněny.


108 Modelování těles3.6 Reprezentace tělesa pomocí hraniceHraniční reprezentace tělesa (boundary representation, B-rept) používá k popisutělesa jeho hranice (povrchu). Jestliže je hranice např. 2-manifoldem bez hranicev E 3 , pak rozděluje prostor E 3 na dvě části: vnitřek a vnějšek tělesa. Hranice jeorientovaná, což umožňuje rozlišit, na které straně je vnitřek a na které vnějšek.Popis tělesa má dvě části: topologickou a geometrickou. Zatímco v topologické částijsou popisovány vzájemné vztahy (sousednost, incidence) mezi stěnami, hranamia vrcholy, geometrický popis popisuje vestavění uvedených entit do prostoru (např.souřadnice vrcholů, rovnice ploch). Podrobnosti uvedeme později.Historicky se metody hraniční reprezentace vyvíjely z popisu mnohostěnu. Mnohonejstarších objemových modelářů pracujících s hraniční reprezentací požadovalo hranicitypu 2-manifold v E 3 . Nevýhodou bylo, že tak byla vyloučena některá tělesa,která by jinak konstruktér možná rád použil, např. tělesa, která se sama sebe dotýkají(obr. 3.9 vlevo). Na druhou stranu byly ale pro uvedenou třídu těles velmidobře prozkoumány jejich topologické vlastnosti, takže bylo možné čerpat z bohatématematické teorie. Později byl koncept téměř výhradního používání hranice typu2-manifold revidován. Mimo jiné nepochybně také proto, že regularizovaná booleovskáoperace nad 2-manifoldy může vést k výsledku, který 2-manifoldem není (obr.3.9 vpravo).Obr. 3.9: Prakticky snad přijatelné těleso (vlevo), jehož hranice ale není 2-manifoldemv E 3 ; těleso, jehož hranice není 2-manifoldem, může bohužel vzniknout množinovouoperací s tělesy, která tuto podmínku splňují (vpravo).V historii konstrukce objemových modelářů využívajících hraniční reprezentacelze tak vysledovat tři přístupy: 1) Tělesa musí mít hranici typu 2-manifold v E 3 .Pokud také výsledek booleovské operace nesplňuje tuto podmínku, dojde k chybě. 2)Tělesa jsou sice topologicky popsána tak, jako by se jednalo o objekty s hranicí typu2-manifold v E 3 , avšak jejich vestavění do prostoru dovoluje geometrickou koincidencientit (vrcholy, hrany, plochy) hranice, která ale není zachycena v topologickémpopisu. 3) Jsou plně povoleny objekty, jejichž hranice není 2-manifold v E 3 (jakonapř. na obr. 3.9 vlevo). Je očividné, že přístup 2) není zcela korektní a že může véstk některým potížím s robustností algoritmů. Ošetření geometrických koincidencí jepracné a problematické.☞


3.6 Reprezentace tělesa pomocí hranice 109Příklad 3.2. Vysvětlete, proč hranice tělesa na obr. 3.9 vlevo nebo hranice výslednéhotělesa na témže obrázku vpravo není 2-manifoldem v E 3 . Návod: Soustřeďtese na body na hraně ve „špičaté“ části tělesa a uvažujte jejich okolí. Je toto okolíhomeomorfní s kruhem? Porovnejte s body a jejich okolím na jiných hranách.3.6.1 Implementace hraniční reprezentaceDále popíšeme, jak lze popis tělesa pomocí hranice realizovat prakticky. Pro jednoduchostse omezíme na mnohostěny (tělesa s rovinnými stěnami). Víme však již ale,že toto omezení není zásadní. Mezi tělesy s rovinnými stěnami a tělesy se zakřivenýmistěnami existuje topologická ekvivalence. O tělesech s rovinnými stěnami senám ale bude o něco lépe uvažovat.Principiálně je popis tělesa tvořen seznamem povrchů (shell), které těleso omezují.Každý povrch je popsán seznamem jeho stěn (face). Každá stěna je popsánapomocí smyček (loop), které ji obklopují. Každá smyčka je popsána seznamem hran(edge), které ji vytvářejí. Poloha každé hrany je určena dvěma vrcholy.Při úvahách o konkrétní podobě datové struktury tělesa je samozřejmě nutné vzítv úvahu také požadavky operací, které budou s tělesem následně prováděny. Jednáse zejména o booleovské operace. Jak uvidíme později, budou od datové strukturyvyžadovány zejména odpovědi na následující otázky: 1) Pro každý vrchol určit hranya stěny, které s vrcholem incidují. 2) Pro každou hranu určit, se kterými vrcholyinciduje. Určit také, které stěny incidují s danou hranou (v tělesech s hranicí 2--manifold v E 3 přiléhají k hraně pouze dvě stěny; obecně se ale může jednat o vícestěn). 3) Pro každou stěnu určit hrany, které ji omezují. Hrany jsou organizoványdo smyček. Pro stěny bez otvorů je jedna smyčka; pro stěny s otvory je více smyček.Směr, ve kterém jsou hrany a vrcholy ve smyčce procházeny, určuje normálu stěny,a tedy vnitřek a vnějšek tělesa. Ne všechny uvedené informace musí být ovšemv datové struktuře zaznamenány explicitně. Je však žádoucí, aby je bylo možnépoměrně rychle dopočítat.Dalším hlediskem při návrhu datové struktury je hledisko robustnosti operací,které jsou nad strukturou prováděny. Při implementaci booleovských operací se např.ukázalo, že splnit požadavek robustnosti odpovídajících algoritmů je dosti obtížné.Z hlediska robustnosti je např. žádoucí, aby v datové struktuře nebyly informaceuchovávány duplicitně, jinak hrozí nebezpečí vzniku nekonzistencí, které mohouvzniknout zejména vlivem numerických nepřesností při výpočtech. Jednoduše řečeno:Může se stát, že duplicitní informace popisují dvě různá tělesa místo toho,aby popisovaly těleso jediné. Potíže by pak nastaly tehdy, jestliže by některý z algoritmůsoučasně použil informace, které si vzájemně odporují. Jako příklad uveďme,že lze např. upustit od explicitního uchovávání souřadnic vrcholů tělesa a rovnichran, jsou-li známy rovnice stěn. Souřadnice vrcholů a rovnice hran lze vždy podlepotřeby a v odpovídající přesnosti dopočítat (tuto variantu bychom mohli použítnapř. u těles ohraničených obecnými plochami). Podobně naopak u mnohostěnůpostačí uchovávat souřadnice vrcholů. Rovnice hran a stěn mohou být vždy podle


110 Modelování tělespotřeby a v odpovídající přesnosti dopočítány.Jednu z možných variant konkrétní implementace hraniční reprezentace navrhljiž na počátku sedmdesátých let Baumgart. V jím navržené datové struktuře je nejvícetopologických informací neseno hranou (obr. 3.10). Pro datovou strukturu sevžil název okřídlená hrana (winged edge; k hraně přiléhají dvě plochy, což připomínákřídla, viz. též obr. 3.10). Ani po mnoha letech nepozbyla tato datová struktura naaktuálnosti. Konkrétní příklad definice datové struktury pro popis tělesa uvádímev následujícím fragmentu zdrojového textu. Text je maximálně zjednodušen. Dovolenajsou zde pouze tělesa s jediným povrchem a plochy s jedinou smyčkou. (Slovnípopis prezentovaný v úvodu této podkapitoly byl o něco obecnější.)//**********************************************************//* Popis t e l e s a metodou h r a n i c n i r e p r e z e n t a c e *//**********************************************************typedef s t r u c t { f l o a t x , y , z ; } Coord3 ; // Souradnice v E3s t r u c t Vertex { // *** Vrchol t e l e s a ***Vertex * next ; // D a l s i v r c h o l v t e l e s eCoord3 coord ; // Souradnice vrcholu} ;s t r u c t Edge { // *** Hrana t e l e s a ***Edge *pred1 , * succ1 ; // Predch . a n a s l . hrana plochy 1Edge *pred2 , * succ2 ; // Predch . a n a s l . hrana plochy 2Face * face1 , * f a c e 2 ; // Prvni a druha p r i l e h a j i c i f a c eVertex * vert1 , * vert2 ; // Vrcholy hrany} ;s t r u c t Face { //*** Stena t e l e s a ***Face * next ; // D a l s i stena tehoz t e l e s aEdge * edge ; // Prvni hrana smycky} ;s t r u c t S o l i d { // *** Teleso B rept ***Face * f a c e ; // Prvni stena povrchuVertex * vertex ; // Prvni v r c h o l t e l e s a} ;//*********************************************************Za povšimnutí stojí, že struktura je použitelná pouze pro tělesa, jejichž povrch je 2--manifold v E 3 . Stojí ale na druhé straně rovněž za zmínku, že popisovaná strukturanachází uplatnění nejen při modelování těles, ale i jinde, např. při popisu planárníchmap. Pozorný čtenář jistě dokáže obojí zdůvodnit. V průběhu času se také objevily


3.6 Reprezentace tělesa pomocí hranice 111různé modifikace, které sledovaly určitá zlepšení při provádění některých operacís modelem tělesa. Objevila se též rozšíření pro tělesa, jejichž povrchy nejsou 2--manifold v E 3 . Systematický popis těchto modifikací bohužel ale přesahuje rámectohoto textu.Obr. 3.10: Okřídlená hrana (vodorovná hrana) a k ní přiléhající dvě plochy („křídla“).Hrana je součástí dvou smyček hran, které jsou na obrázku vyznačeny šipkami.Pospojování hran do smyček je zajištěno pointery na předchozí a následující hranupodél každé z obou ploch, jak plyne ze zdrojového kódu.Příklad 3.3. Rozšiřte dříve uvedenou ukázku zdrojového kódu tak, aby těleso mohlomít více navzájem nesouvisejících povrchů (např. těleso s dutinou uvnitř) a dále ještětak, aby každá stěna mohla být ohraničena více než jednou smyčkou (to je zapotřebí,pokud mají být ve stěnách otvory, jako je tomu např. na obr. 3.6 vlevo).☞Příklad 3.4. Navrhněte, jak by bylo možné dříve uvedenou datovou strukturu rozšířittak, aby mohla popisovat také tělesa, jejichž hranice není 2-manifoldem v E 3 ,jako je tomu např. na obr. 3.9. Návod: Musí být možné, aby k jedné hraně přiléhalyvíce než dvě plochy. Obecně není počet přiléhajících ploch omezen. Za jistýchokolností (jakých?) bychom mohli usuzovat, že by měl být sudý.☞3.6.2 Eulerovy operátoryK obsluze datových struktur hraniční reprezentace se často používají tzv. Eulerovyoperátory. Bylo tomu tak už i v minulosti, kdy např. ještě nebyla známa technikaobjektového programování. To proto, že přímá a bezchybná obsluha datové strukturyi v její nejjednodušší zde prezentované variantě by byla bez operátorů téměřnemožná. Použití Eulerových operátorů je výhodné, protože do značné míry odstraňujenutnost zabývat se konkrétní realizací datových struktur při implementacioperací na vyšší úrovni. Eulerovy operátory modifikují datovou strukturu tak, abyvždy popisovala nějaké těleso, pro které je splněna Eulerova formule (třebaže užvíme, že ne všechna tělesa splňující Eulerovu formuli jsou tělesy, ke kterým bychomneměli výhrady).


112 Modelování tělesUveďme několik konkrétních příkladů možných operátorů. Za operátory nejnižšíúrovně lze považovat např. následující operátory: Operátor createSolid vytvoří minimální(ve smyslu Eulerovy formule) neprázdné těleso, které obsahuje jeden vrchol,jednu hranu a dvě plochy (obě plochy přiléhají k jediné hraně a leží tedy geometrickyzatím „na sobě“) (obr. 3.11a); operátor splitEdge „rozštípne“ zadanou hranuvložením nového vrcholu (obr. 3.11b); operátor splitFace „rozštípne“ zadanou stěnuvložením nové hrany (obr. 3.11c). (Poznamenejme, že jsme se zde při pojmenováváníoperátorů nedrželi tradice a nepoužili jsme jména ve tvaru mxky). Deklaraceuvedených operátorů by mohla být následující:S o l i d * c r e a t e S o l i d ( Vertex *v ) ;Edge * s p l i t E d g e ( Edge *e , Vertex *v ) ;Face * s p l i t F a c e ( Face * f , Edge *e1 , Edge * e2 ) ;Všechny uvedené parametry operátorů jsou vstupní: *v je pointer na místo v paměti,v němž buď už jsou nebo někdy později budou souřadnice vrcholu, *e je pointerna hranu, která má být rozštípnuta, *e 1 , *e 2 jsou pointery na hrany, které svýmipočátky určují polohu, kam má být vložena nová hrana při rozštípnutí plochy (obr.3.11c). Každý operátor vrací pointer na nový útvar, který vytvořil.Obr. 3.11: Eulerovy operátory createSolid, splitEdge a splitFace (viz text)Jako příklad aplikace uvedených operátorů ukážeme postup, při němž je vytvořenkvádr. Proces začíná použitím operátoru createSolid a třikrát opakovaným použitímoperátoru splitEdge. Další postup je již znázorněn a vysvětlen na obr. 3.12.Jiným příkladem aplikace uvedených operátorů je vepsání řezového polygonu dotělesa. Mějme těleso a rovinu. Pro jednoduchost předpokládejme, že těleso má jedenpovrch a že každá stěna tělesa je ohraničena jedinou konvexní smyčkou hran.(Prosíme čtenáře, aby po přečtení odstavce promyslel, jaké potíže by nastaly, kdybysmyčka nebyla konvexní.) Chceme najít řezový polygon a vepsat jej do modelu(obr. 3.13). Postup řešení je následující: Probíráme všechny stěny tělesa tak dlouho,až nalezneme libovolnou stěnu, která protíná zadanou řezovou rovinu. Některé dvě


3.6 Reprezentace tělesa pomocí hranice 113Obr. 3.12: Vytvoření kvádru: Nejprve je aplikován operátor createSolid, pak třikrátoperátor splitEdge. Výsledek této akce je výchozím obrázkem vlevo nahoře. Dálese pak střídá použití operátorů splitFace a splitEdge, dokud není vytvořena takovástruktura vrcholů, hran a stěn, jak vyžaduje kvádr (obrázek si prohlížejte po sloupcích).K tomu, abychom skutečně obdrželi kvádr, je nutné ještě zadat odpovídajícísouřadnice vrcholů, ale to je již jednoduché (stejným postupem bychom vytvořilitaké obecný šestistěn - rozdíl je jen v souřadnicích, které zadáme).hrany této stěny protínají řezovou rovinu v bodech, které se v modelu stanou vrcholy(označme tyto body A, B). Rozštípneme hrany, na nichž body A, B leží.Nalezenou stěnu také rozštípneme, a to vložením nové hrany spojující vrcholy A,B. Ve vytváření řezové křivky pokračujeme přechodem do sousední stěny, která incidujes vrcholem B (v diskutované datové struktuře je takový přechod snadný).Postupným prohledáváním hran ležících na obvodu této stěny nalezneme vrchol C.Rozštípneme hranu, na níž bod C leží a plochu rozštípneme hranou spojující vrcholyB, C. Podobně pokračujeme tak dlouho, dokud se řezová křivka neuzavře ve vrcholuA. Deklarace popsaného operátoru může být následující:EdgeList * i nscribeCuttingPolygon ( S o l i d *s , PlaneEq * plane ) ;Obr. 3.13: Vepsání řezového polygonu (viz text)Po provedení operátoru inscribeCuttingPolygon je řezový polygon vepsán. Funcenavíc vrací seznam hran, které byly vepsány (řezový polygon). Tohoto seznamu lze


114 Modelování tělesvyužít zejména při provádění řezu tělesa pomocí operátoru splitSolid, který tělesopodél řezové křivky rozdělí (obr. 3.14). Operátor splitSolid může být deklarovántakto:S o l i d * s p l i t S o l i d ( S o l i d *s , EdgeList * cuttingPolygon ) ;Obr. 3.14: Operátor splitSolid☞☞Příklad 3.5. Implementujte operátory createSolid, splitEdge, splitFace a inscribeCuttingPolygonpro datovou strukturu uvedenou v této podkapitole.Příklad 3.6. Pro datovou strukturu uvedenou v této podkapitole implementujtefunkci, která zjistí, zda bod o zadaných souřadnicích leží uvnitř či vně tělesa, kterédatová struktura popisuje. Návod: Ze zadaného bodu veďte libovolnou polopřímkua spočítejte, kolikrát protíná povrch tělesa. Třebaže je princip řešení jednoduchý,je detailní implementace s ošetřením všech speciálních případů, ke kterým může přivýpočtu dojít, poměrně pracná.3.6.3 Provádění booleovských operacíProvádění booleovských operací s tělesy je při hraniční reprezentaci těles obávanýmimplementačním problémem. Pokud by snad čtenář byl někdy postaven předproblém jej řešit, doporučujeme velmi dobře tento krok uvážit. Třebaže se můžezdát situace z teoretického pohledu jasná, je praktická a přiměřeně bezchybná implementacevelmi obtížná. I renomovaným firmám trvalo poměrně dlouho, než sedopracovaly ke stabilním implementacím.Při nástinu řešení se zde omezíme na operace mezi takovými tělesy, jejichž povrchje tvořen vždy jen jedinou obálkou. To je možné, protože problém operací s tělesys více obálkami lze na tento problém, který lze považovat za základní, vždy převést.Další zjednodušení bude spočívat v redukci repertoáru operací, které budeme uvažovat.Třebaže v systémech pro modelování těles bývají obvykle k dispozici operace∩ * , ∪ * a ∖ * , není zapotřebí implementovat všechny. Uvážíme-li, že je možné snadno


3.6 Reprezentace tělesa pomocí hranice 115realizovat doplněk tělesa, pak je zřejmé, že postačí implementovat jednu z uvedenýchoperací, např. operaci ∩ * . Ostatní operace pak snadno získáme pomocí operace ∩ *a doplňku těles (je označen pomocí ¬)A ∪ * B = ¬(¬A ∩ * ¬B) , (3.5)A ∖ * B = A ∩ * ¬B . (3.6)Vidíme tedy, že se můžeme omezit pouze na operaci regularizovaného součinu. Vytvořenídoplňku je jednoduché. Jak jsme vysvětlili již dříve, je zapotřebí obrátit orientacinormál všech stěn tělesa. To se provede otočením orientace (pořadí, v němžjsou procházeny vrcholy) všech smyček na všech stěnách. Poznamenejme, že zavedenímdoplňku získáváme možnost pracovat s nekonečnými tělesy, jejichž povrch všakmusí být konečný.Princip řešení úlohy regularizovaného průniku dvou těles A, B, každé s jednímpovrchem, lze popsat takto: 1) Urči, zda se některá dvojice stěn f ∈ A a g ∈ Bprotíná. Jestliže se neprotíná žádná dvojice stěn, pak proveď pouze test, zda povrchytěles leží jeden uvnitř druhého a zbývající kroky přeskoč (výsledkem operace je pakbuď „menší“ těleso nebo těleso prázdné). 2) Pro každou stěnu f tělesa A, kteráprotíná těleso B, proveď řez tělesa B plochou stěny f. Nalezenou řezovou oblastomez na tu část, která současně leží uvnitř stěny f. 3) Pro každou stěnu g tělesaB, která protíná těleso A, proveď řez tělesa A plochou stěny g. Nalezenou řezovouoblast omez na tu část, která současně leží uvnitř stěny g (obr. 3.15). 4) Sestavhranici výsledného tělesa A ∩ * B. Hledaná hranice bude obsahovat ty části hranicetělesa A, které leží uvnitř tělesa B, ty části hranice tělesa B, které leží uvnitř tělesaA a ty části společné hranice těles A a B, kde je normála hranic obou těles souhlasněorientována. Tyto části byly určeny v krocích 2), 3).Obr. 3.15: K realizaci operace průniku (popis je uveden v textu)Přestože popsaný postup nevypadá obzvláště komplikovaně, není jeho implementacevůbec jednoduchou záležitostí. Závažným problémem je dosažení robustnostialgoritmu. Jaké potíže zde v tomto ohledu vznikají, osvětlíme na příkladě. Předpokládejme,že chceme najít průsečíky přímky s krychlí dle obr. 3.16. Při tom se můženapř. stát, že průsečík přímky s rovinou stěny f 1 je vyhodnocen jako bod na hraněstěny f 1 , ale naproti tomu průsečík s rovinou stěny f 2 je vyhodnocen jako bod uvnitřstěny f 2 (obr. 3.16). Tato nekonzistence je způsobena numerickými nepřesnostmi,


116 Modelování těleskteré nikdy nemohou být zcela odstraněny, a bez dalších opatření způsobí algoritmu,v němž by k takové situaci došlo, vážné potíže. Robustní algoritmus se musí vyhnoutvzniku nekonzistencí. Jednou zjištěná informace musí být „rozeslána“ do všech míst,kde je jí zapotřebí. V našem příkladě to znamená, že jestliže je zjištěno, že průsečíkpřímky s rovinou stěny f 1 leží na hraně stěny f 1 , pak také průsečík s f 2 nutně musíležet na hraně stěny f 2 (hrana je společná), a proto se průsečík s f 2 již nepočítá;polohu na společné hraně je zapotřebí vynutit. Je velmi obtížné všechny možné podobnésituace při implementaci odhalit a ošetřit. Obtížnost situace je ilustrovánaskutečností, že bod může vzhledem k tělesu zaujímat následující polohy: uvnitř tělesa,na ploše stěny, na hraně a ve vrcholu. Uvedené čtyři možnosti pro jedno tělesodávají vzniknout šestnácti případům, jsou-li tělesa dvě.Obr. 3.16: K problémům vznikajícím při implementaci množinových operací☞Příklad 3.7. Pro datovou strukturu uvedenou v této podkapitole implementujteoperaci doplněk tělesa.3.6.4 Zobrazení tělesa popsaného hraniční reprezentacíZobrazení tělesa popsaného hraniční reprezentací nečiní potíže. V každém okamžikuje totiž k dispozici popis hranice, kterou je třeba zobrazit. Stačí z něho pouze přečístpotřebné údaje. Tak např. při zobrazení pomocí tzv. drátěného modelu stačí připrůchodu datovou strukturou získat všechny hrany (tj. úsečky) a ty vykreslit. Je-lipožadováno zobrazení s řešením viditelnosti, pak se při průchodu datovou strukturouzjistí všechny plochy tělesa. Po vyřešení viditelnosti standardními metodami seviditelné plochy zobrazí.☞Příklad 3.8. Pro datovou strukturu uvedenou v této podkapitole implementujtezobrazení tělesa. (Tento úkol je ale poněkud pracnější.)3.7 CSG reprezentace tělesaComputer Solid Geometry (CSG) je další často používanou metodou reprezentacetěles. Současně je tímto názvem také charakterizována jistá metodologie vytváření


3.7 CSG reprezentace tělesa 117těles. Tělesa jsou vytvářena za pomoci standardních primitivních těles, regularizovanýchbooleovských operací a geometrických transformací. Standardními primitivnímitělesy bývají zpravidla kvádr, hranol, koule, válec, kužel, toroid atd. Uživatelvytváří instance primitivních těles zadáním požadovaných rozměrů a jejich umístěnímv prostoru. Regularizovanými booleovskými operacemi bývají i zde regularizovanýsoučin, součet a rozdíl (∩ * , ∪ * , ∖ * ). Zdá se logické připustit, aby se booleovskýchoperací mohly kromě primitivních těles zúčastňovat také tělesa uživatelem již dřívevytvořená. Jako příklad CSG popisu uveďme těleso dle obr. 3.17. Popis tohoto tělesaby bylo možné zapsat ve tvaru[translate y (block(6, 2, 1), 1) ∖ * translate x (translate y (cylinder z (1, 1), 2), 3)]∪ * [block(6, 1, 3) ∖ * translate x (translate z (rotate x (cylinder z (1, 1), −90), 2), 3)] ,kde translate x znamená translaci tělesa ve směru osy x o danou vzdálenost, rotate xznamená rotaci kolem osy x o daný úhel, cylinder z značí válec s osou totožnou s osouz s daným poloměrem a výškou, block je kvádr s vrcholem v počátku a s danýmirozměry ve směru jednotlivých os. Na obr. 3.17 jde osa x dopředu a osa y zleva doprava.Obr. 3.17: K modelování tělesa technikou CSGV tomto případě jsme těleso vytvořili spojením dvou kvádrů, do nichž jsme předem„vyvrtali“ otvory odečtením válců umístěných do správné polohy. Operace, kterébylo pro vytvoření tělesa nutné provést, lze znázornit pomocí CSG stromu (obr.3.18 vlevo). Poznamenejme, že k témuž tělesu lze dospět různými postupy. Např.naše těleso je možné vytvořit také postupem, kdy nejprve spojíme oba kvádry a pakteprve „vrtáme“ díry, což lze zapsat takto[translate y (block(6, 2, 1), 1) ∪ * block(6, 1, 3)]∖ * translate x (translate z (rotate x (cylinder z (1, 1), −90), 2), 3)∖ * translate x (translate y (cylinder z (1, 1), 2), 3).Tomuto postupu odpovídá CSG strom dle obr. 3.18 vpravo. Teoreticky jsou obapostupy rovnocenné a bylo by možné vymyslet ještě postupy další. Při spojováníobou kvádrů nebylo dále např. zapotřebí, aby se právě dotýkaly. Mohly se i překrývat.Operace sjednocení by překryv odstranila. V praxi je při vytváření možné


118 Modelování tělesdát přednost např. tomu postupu, který více odpovídá předpokládané technologiivýroby tělesa.Obr. 3.18: Stromy popisující vytvoření tělesa různými postupy popsanými v textu3.7.1 Realizace CSG reprezentaceNyní již můžeme přistoupit k příkladu datové struktury pro modelování tělesa metodouCSG. Ve shodě s obr. 3.18 je datovou strukturou strom (obr. 3.19). Vnitřníuzly stromu odpovídají booleovským operacím a transformacím. Listy odpovídajítransformacím a primitivním tělesům. Chápeme-li booleovské operace jako binární,pak je datová struktura binárním stromem. Zobecníme-li booleovskou operaci pron argumentů, pak je datová struktura stromem n-árním. Stojí za povšimnutí, žeCSG strom a jemu odpovídající datová struktura uchovávají také informaci o historiimodelování (vytváření) tělesa. To je významná vlastnost, ze které se těží např. připozdějších modifikacích tělesa (již vytvořená tělesa lze snadno editovat). V hraničníreprezentaci tato informace k dispozici není.Obr. 3.19: Počítačová realizace CSG modelu: V listech jsou primitivní tělesa a jejichtransformace; v uzlech operace a transformace; transformace v uzlu se využije pokudje s vytvořeným tělesem nějak manipulováno.


3.7 CSG reprezentace tělesa 1193.7.2 Provádění booleovských operací v reprezentaci CSGJak vyplynulo z předchozího výkladu, je provedení booleovských operací v CSGreprezentaci velmi jednoduché. Stačí vytvořit CSG strom, v němž kořen odpovídápožadované booleovské operaci. CSG stromy, které odpovídají tělesům vstupujícímdo booleovské operace, se stanou podstromy tohoto nově vytvořeného stromu. Jednoduchostprovádění booleovských operací v reprezentaci CSG je způsobena tím,že CSG reprezentace explicitně neuchovává informaci o hranici tělesa. Jak vímez odstavce o hraniční reprezentaci, byl to právě výpočet hranice tělesa vznikléhobooleovskou operací, který vyžadoval značného úsilí. Bohužel, ať už používá objemovýmodelář jakoukoli reprezentaci, je hranice tělesa důležitou a často požadovanouinformací. Jestliže se zjištění hranice požaduje, pak je nutné všechny booleovskéoperace předepsané CSG stromem skutečně provést. To se děje procházením CSGstromu a realizací všech předepsaných operací podobně, jak to bylo naznačeno proreprezentaci hraniční. Problémy s komplikovaným výpočtem hranice se tak pouzepřesunou do jiného času a do jiných míst systému. Při řešení některých problémůje však možné se výpočtu hranice vyhnout. Ilustraci takového postupu lze naléztv následujících odstavcích.3.7.3 Určení vzájemné polohy bodu a CSG tělesaUrčení vzájemné polohy bodu a tělesa patří k základním úlohám při využití objemovéhomodelu. Metoda, která se používá pro hraniční reprezentaci, spočívá v tom, žese zvolí libovolná polopřímka začínající/končící v klasifikovaném bodě a vyšetřují sejejí průsečíky s hranicí tělesa. Je-li počet průsečíků lichý, pak leží klasifikovaný boduvnitř tělesa. Použití této metody v CSG modelu by vyžadovalo výpočet hranice,ale tomu se chceme pokud možno vyhnout. Ukážeme proto jiný postup, který jesoučasně ilustrací možného řešení celé třídy podobných problémů.Předpokládejme, že konstruujeme funkci, jejíž argumenty jsou CSG popis tělesaa souřadnice klasifikovaného bodu. Funkce vrací hodnoty In, Out, On (bod ležíuvnitř, vně nebo na hranici tělesa). Předpokládejme, že by funkce mohla pracovattakto (obr. 3.20): 1) Je-li testované těleso primitivem (je reprezentováno listem CSGstromu), pak lze vzájemnou polohu tělesa a bodu jednoduše určit. 2) Není-li testovanétěleso primitivem (je reprezentováno vnitřním uzlem CSG stromu), pak funkcezjistí vzájemnou polohu bodu a těles reprezentovaných synovskými uzly vyšetřovanéhouzlu (to může spustit rekurzivní provádění uvažované funkce). Vzájemnápoloha bodu a tělesa reprezentovaného vyšetřovaným uzlem se určí podle pravidelplynoucích z operace, kterou uzel reprezentuje. Je-li např. bod uvnitř obou tělesreprezentovaných synovskými uzly a je-li operací v uzlu např. průnik, bude bod ležettaké uvnitř tělesa reprezentovaného vyšetřovaným uzlem. Myšlenka postupu jeelegantní. Stanovení pravidel pro výslednou polohu vzhledem k uzlu však není takjednoduché. Obtížné je zejména promýšlení všech speciálních případů, které mohounastat. Řekněme, že vyšetřujeme např. operaci sjednocení a že vzhledem k objek-


120 Modelování tělestům korespondujícím se synovskými uzly leží uvažovaný bod na povrchu, a to vždyve vrcholech. Vzhledem k výslednému tělesu může pak uvažovaný bod ležet v různýchpolohách: uvnitř, na povrchu uvnitř stěny, na povrchu na hraně a konečně takéna povrchu ve vrcholu. (Prosíme laskavého čtenáře, aby si všechny uvedené variantypokusil představit.) Pro správnou funkci algoritmu bude nezbytné rozpoznat,která z variant nastala. Podobně bude zapotřebí postupovat i pro jiné polohy boduvzhledem k tělesům reprezentovaným synovskými uzly.Obr. 3.20: Určování vzájemné poolohy bodu a tělesa reprezentovaného CSG modelem:Bod A je uvnitř jednoho z primitivních těles. Je také uvnitř celého tělesa,protože při operaci sjednocení, která je zde k vytvoření tělesa použita, k tomu stačí,aby byl bod uvnitř alespoň jednoho z primitivních těles, která do operace vstupují.3.7.4 Zobrazení tělesa reprezentovaného pomocí CSGZde jsou problémy do značné míry podobné těm, které jsme naznačili v předchozímodstavci. Nejpřímočařejším postupem je požadovat pro zobrazení tělesa výpočet jehohranice. Tento postup se volí dosti často, a to i přesto, že implementace příslušnýchalgoritmů je, jak již víme, dosti nepříjemná. Jako ukázku postupu, kdy se hranicenepočítá, uvedeme příklad zobrazení CSG tělesa metodou sledování paprsku. Naznačímeprincip funkce, která vypočítá průnik paprsku s daným tělesem, tedy tu částpaprsku, která leží uvnitř tělesa (z ní bod nejbližší pozorovateli je zapotřebí zobrazit).Vstupními parametry funkce jsou paprsek (zadaný např. počátečním bodema směrem) a CSG popis tělesa. Výstupem je seznam přímkových segmentů paprsku,které leží uvnitř zadaného tělesa. Funkce může pracovat takto: 1) Je-li testovanétěleso primitivem (listem CSG stromu), pak lze průnik paprsku s tělesem jednodušeurčit. 2) Není-li testované těleso primitivem, ale vnitřním uzlem CSG stromu, pakse zjistí průnik paprsku s tělesy reprezentovanými synovskými uzly vyšetřovanéhouzlu (to může spustit rekurzivní provádění uvažované funkce). Nad takto zjištěnými


3.7 CSG reprezentace tělesa 121průniky pro synovské se pak provede booleovská operace předepsaná ve vyšetřovanémuuzlu. Protože se jedná o booleovskou operaci nad jednorozměrnou oblastí,lze ji snadno implementovat. Realizaci a činnost popsané funkce ukazuje následujícífragment zdrojového textu a obr. 3.21.Obr. 3.21: Přímé zobrazování CSG modelu (bez explicitního výpočtu hranice) metodousledování paprsku. Vlevo je vyznačeno těleso a paprsek. Uprostřed je CSGstrom pro těleso; vyznačeno je také řešení průsečíků paprsku s jednotlivými primitivy(kvádr a válec) i s výsledným tělesem. Vpravo je naznačeno, že úsečku, v nížpaprsek protíná těleso, lze získat jako rozdíl úsečky, v níž paprsek protíná kvádr,a úsečky, v níž paprsek protíná válec. Rozdíl proto, že těleso bylo získáno odečtenímválce od hranolu.SgmtList * r a y I n t e r s e c ( Coord3 * orig , Coord3 * dir , CSGnode *node ){i f ( i s L i s t ( node ) ) return i n t e r s e c P r i m i t i v e ( orig , dir , node ) ;s l := r a y I n t e r s e c ( orig , dir , node > lSon ) ;s r := r a y I n t e r s e c ( orig , dir , node > rSon ) ;return boolOperOnSgmtLists ( s l , sr , node > o p e r a t i o n ) ;}Příklad 3.9. Pokuste se o implementaci zobrazení tělesa dle této podkapitoly. (Úkolje samozřejmě ale poněkud pracnější.)☞


122Literatura[1] Budinský, B. – Kepr, B. Základy diferenciální geometrie s technickými aplikacemi.2. vydání. Praha: Státní nakladatelství technické literatury, 1970. 344 s.[2] Budinský, B. Analytická a diferenciální geometrie. 1. vydání. Praha: Státnínakladatelství technické literatury, 1983. 296 s.[3] Ježek, F. Diferenciální geometrie. Skripta. Plzeň: ZČU, 2008. 58 s.[4] Martišek, D. Matematické principy grafických systémů. 1. vydání. Brno: NakladatelstvíLittera. 2002. 296 s. ISBN 80-85763-19-2[5] Piegl, L. – Tiller, W. The NURBS book. 2. vydání. New York: Springer-VerlagNew York, Inc. 1997. 660 s. ISBN 3-540-61545-8[6] Rogers, David F. An introduction to NURBS: with historical perspective. SanFrancisco: Morgan Kaufmann Publishers, Inc. 2001. 344 s. ISBN 1-55860-669-6[7] Saxena, A. – Sahay, B. Computer Aided Engineering Design. 2. vydání. TheNetherlands: Springer. 2005. 387 s. ISBN 978-1-4020-2555-6[8] Žára, J. – Beneš, B. – Sochor, J. – Felkel, P. Moderní počítačová grafika. 2. vydání.Brno: Computer Press. 2004. 579 s. ISBN 80-251-0454-0


123Rejstříkafinní prostor, 30afinní zobrazení, 30binormála, 38bodinflexní, 38regulární, 37singulární, 37bodynevlastní, 7funkceB-spline, 74hlavní normála, 38homeomorfizmus, 100homogenní souřadnice, 30konzistentní orientace obálek, 105křivkaB-splineneracionální, 80racionální, 86Bézierova, 59kubika, 59racionální, 65explicitní, 34Fergusonovakubika, 54implicitní, 34kubiský spline, 58křivost, 39prostorová, 33regulární, 33rovinná, 32spline, 58kubická, 57tečna, 37uzavřená, 33křivostdruhá, 40první, 39maticeinverzní, 5jednotková, 5množinaregularizovaná, 107omezená variace, 104orientovatelnost, 103parametrtransformace, 36plocha, 43B-splineneracionální, 84racionální, 89tečná rovina, 44polynomyBernsteinovy, 59racionální, 66projektivní prostor, 30projektivní zobrazení, 30prostorprojektivní, 7topologický, 100rovinanormálová, 38oskulační, 37rektifikační, 38


124 Rejstříktečná, 37rovniceexplicitní, 35implicitní, 35parametrická, 35skalární součin, 5součintenzorový, 83torze, 40transformaceortonormální, 4projektivní, 7vektorhlavní normály, 38tečný, 36jednotkový, 37vektorybázové, 3vnitřek tělesa, 104

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!