Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
UNIVERZITA PALACKEHO V OLOMOUCIPRIRODOVEDECKA FAKULTAK A T E D R A A L G E B R Y A G E O M E T R I E
BAKALARSKA PRACE
Vyuzitı programu POV-Ray pri vyucedeskriptivnı geometrie
Vedoucı bakalarske prace:RNDr. Lukas Rachunek, Ph.D.Rok odevzdanı: 2011
Vypracoval:Jan MlcuchM-DG, III. rocnık
Prohlasenı
Prohlasuji, ze jsem vytvoril tuto bakalarskou praci samostatne za vedenıRNDr. Lukase Rachunka, Ph.D. a ze jsem v seznamu pouzite literatury uvedlvsechny zdroje pouzite pri zpracovanı prace.
V Olomouci dne 23. kvetna 2011
Podekovanı
Rad bych na tomto mıste podekoval vedoucımu bakalarske prace RNDr. LukasiRachunkovi, Ph.D. za obetavou spolupraci i za cas, ktery mi venoval pri konzul-tacıch. Dale si zaslouzı podekovanı typograficky system TEX, kterym je pracevysazena.
Obsah
Uvod 4
1 Program POV-Ray 51.1 Uvodnı informace o programu . . . . . . . . . . . . . . . . . . . . 51.2 Nastavenı sceny . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 Pomocny textovy soubor 82.1 Nastavenı barev . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.2 Plochy znazornujıcı prumetny . . . . . . . . . . . . . . . . . . . . 82.3 Znazornenı bodu . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4 Znazornenı prımky . . . . . . . . . . . . . . . . . . . . . . . . . . 92.5 Znazornenı pomocnych car . . . . . . . . . . . . . . . . . . . . . . 102.6 Znazornenı sipky . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.7 Znazornenı roviny v obecne poloze . . . . . . . . . . . . . . . . . 112.8 Znazornenı hlavnıch prımek roviny . . . . . . . . . . . . . . . . . 122.9 Znazornenı prımky kolme k rovine . . . . . . . . . . . . . . . . . . 132.10 Znazornenı znacky pro pravy uhel . . . . . . . . . . . . . . . . . . 142.11 Znazornenı prusecıku prımek . . . . . . . . . . . . . . . . . . . . . 152.12 Znazornenı pomocne plochy . . . . . . . . . . . . . . . . . . . . . 162.13 Znazornenı popisu objektu . . . . . . . . . . . . . . . . . . . . . . 16
3 Mongeovo promıtanı modelovane pomocı programu POV-Ray 183.1 Zobrazenı zakladnıch utvaru . . . . . . . . . . . . . . . . . . . . . 18
3.1.1 Zobrazenı bodu . . . . . . . . . . . . . . . . . . . . . . . . 183.1.2 Zobrazenı prımky . . . . . . . . . . . . . . . . . . . . . . . 213.1.3 Zobrazenı roviny . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Polohove ulohy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.2.1 Dvojice prımek . . . . . . . . . . . . . . . . . . . . . . . . 273.2.2 Dvojice rovin . . . . . . . . . . . . . . . . . . . . . . . . . 293.2.3 Prusecık prımky s rovinou . . . . . . . . . . . . . . . . . . 30
3.3 Metricke ulohy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.3.1 Prımka kolma k rovine jdoucı danym bodem . . . . . . . . 323.3.2 Rovina kolma k prımce jdoucı danym bodem . . . . . . . . 34
3.4 Aplikace zakladnıch uloh . . . . . . . . . . . . . . . . . . . . . . . 353.4.1 Prunik trojuhelnıku . . . . . . . . . . . . . . . . . . . . . . 353.4.2 Prusecık prımky s jehlanem . . . . . . . . . . . . . . . . . 353.4.3 Prunik hranolu a jehlanu . . . . . . . . . . . . . . . . . . . 373.4.4 Rez rotacnıho kuzelu rovinou . . . . . . . . . . . . . . . . 37
Zaver 40
Uvod
Pri vyuce deskriptivnı geometrie byva nekdy problem predstavit si, jak zo-
brazovana scena ve skutecnosti vypada. Je to problem zejmena u nekterych
slozitejsıch prostorovych scen, kde vystupuje nekolik objektu. Naprıklad prusecık
prımky s rovinou, pruniky teles atd.
Cılem teto prace je ukazat moznosti programu POV-Ray pri tvorbe doplnujı-
cıch obrazku pro vyuku deskriptivnı geometrie. Snazil jsem se o priblızenı prace v
programu POV-Ray, o popis pomocneho textoveho souboru, ktery jsem vytvoril,
a o popis nekterych uloh z Mongeova promıtanı, ktere jsem vykreslil. V praci se
zameruji predevsım na popis tvorby jednotlivych scen v programu POV-Ray a
jen okrajove se venuji zpusobu resenı uloh z teorie Mongeova promıtanı.
Celou praci jsem rozdelil do trı vetsıch kapitol.
V prvnı kapitole popisuji program POV-Ray, praci v nem a zakladnı nastavenı
scen, ktere pozdeji pouzıvam.
Druha kapitola je venovana pomocnemu textovemu souboru, ktery v kazde
scene pouzıvam a do ktereho jsem si predem nadefinoval vetsinu objektu, ktere
se ve scenach objevujı.
Ve tretı, nejobsahlejsı kapitole, popisuji jiz jednotlive sceny znazornujıcı ulohy
v Mongeove promıtanı. Nejprve jsem se snazil o zobrazenı zakladnıch utvaru jako
bod, prımka a rovina. Pote jsem vykreslil nektere polohove ulohy, dale metricke
ulohy a na zaver jsem zobrazil ulohy, ve kterych vystupujı telesa.
Na CD, ktere je k teto praci k prilozene, jsou k dispozici vsechny zdrojove
kody, samostatne prelozene obrazky a instalacnı soubor pro program POV-Ray.
Zdrojove kody jsou v neskracene podobe a se vsemi poznamkami, ktere jsem si
pri jejich vytvarenı psal.
4
1 Program POV-Ray
1.1 Uvodnı informace o programu
Citovano ze serveru zabyvajıcıho se grafikou:
V roce 1986 uvedl programator David Buck svuj prvnı Raytracer DKBTrace (David
Kirk Buck’s Trace) pro Amigu zalozeny na volnem zdrojovem kodu v C pro Unix.
O neco pozdeji, v letech 1987–1988 spolecne s jinym programatorem Aaronem
Collinsem rozsırili DKBTrace i na platformu PC. Poslednı verze DKBTrace nesla
oznacenı 2.12 (rok 1989).
Program se tesil velke popularite, ale protoze oba programatori nestacili pro-
gramovat nove verze dostatecne rychle (alespon podle mınenı vecne nespokojenych
uzivatelu), zacalo se mluvit na diskuznıch forech CompuServe o napsanı uplne
noveho raytraceru.
David Buck nevahal a poslal na forum zpravu, ze poskytne DKBTrace jako zaklad
pro tento novy raytracer za splnenı trech podmınek. Vysledny program musı byt
freeware s prıstupnym zdrojovym kodem (dnes bychom rekli OpenSource), musı
byt nadale vyvıjen pro ruzne platformy a musı mıt nove jmeno. A tak vznikl POV–
Ray – Persistence Of Vision Raytracer, jehoz poslednı verze ma k dnesnımu dni
poradove cıslo 3.62.
Program POV-Ray je software pro vytvarenı obrazku 3D pocıtacove grafiky
pomocı metody sledovanı paprsku, tzv. raytracing. Cela scena je popsana v tex-
tovem souboru jazykem oznacovanym SDL (scene description language). Takto
popsanou scenu POV-Ray precte, provede vykreslenı (rendering) a vysledek ulozı
ve forme rastroveho obrazku o predem zadanem rozlisenı.
1.2 Nastavenı sceny
Aby vysledny obraz vypadal presne podle nasich predstav, je potreba v hlavicce
zdrojoveho kodu urcit nekolik parametru kreslene sceny. Ke spravnemu nastavenı
5
je potreba vedet, ze vse se ve scene popisuje vzhledem k pevnemu systemu
souradnic, ktery je implicitne nastaven jako levotocivy a je znazornen na nasledu-
jıcım obrazku. V prıpade potreby se da toto nastavenı zmenit a souradny system
muze byt i pravotocivy. Ja jsem zustal u nastaveneho levotociveho systemu.
Obrazek 1: Levotociva soustava souradnic
Pri urcovanı polohy objektu je tedy dulezite spravne zadat souradnice ob-
jektu. Zakladnı kostrou sceny je kamera, ktera promıta scenu na obrazovku, svetlo
osvetlujıcı objekty sceny (muze jich byt vıc) a konecne objekty, ktere tvorı scenu.
Nastavenı parametru kamery a svetla jsem pro kazdy obrazek volil individualne
s ohledem na nazornost zobrazovane sceny. Pro nastavenı kamery jsem si nadefi-
noval parametr camrot, ktery urcı natocenı kamery ve smeru os x a y. Tento
prıkaz take pouzıvam pri tvorbe textu popisujıcıho scenu a dıky nemu je text
vzdy natocen smerem ke kamere.
6
#declare camrot = <10, -37, 0>
Kameru jsem nejcasteji umist’oval nasledujıcım zpusobem:
camera {location <0, 0, -12> rotate camrot look_at <0, 0, 0>}
Jejı pozici jsem zvolil na souradnicıch (0, 0, -12) a nasledne jsem ji otocil
prıkazem rotate camrot o zvolene hodnoty. Poslednı parametr udava mısto,
kam se kamera dıva (0, 0, 0).
Svetelne zdroje jsem se rozhodl pouzıt dva, jeden vzdalenejsı umısteny na
souradnicıch (250, 250, -150) a jeden blizsı (10, 15, -15). Pomocı prıkazu
shadowless jsem u nich zakazal tvorbu vrzenych stınu, ktere by jednotlive sceny
cinily mene prehlednymi.
light_source {<250, 250, -150> color White shadowless}
light_source {<10, 15, -15> color White shadowless}
7
2 Pomocny textovy soubor
V souboru
pomocne_prvky.pov
jsem si predem nadefinoval barvy, prımky, ploch π, ν, µ, pomocne cary, popisky
a samotne objekty, ze kterych se sceny skladajı.
2.1 Nastavenı barev
Barvy jsem volil tak, aby se daly pouzıt pro vsechny sceny stejne. Uvedu jen
nekolik prıkladu.
//----------------------------- barvy ---------------------------
#declare Primka = rgb <0.75, 0.15, 0.1> ; // cervena
#declare Prumet = color Navy ; // modra
#declare Stopa = color MidnightBlue filter .3; // tmave modra
Stejnym zpusobem jsem deklaroval i barvy dalsıch teles, viz prilozene CD.
2.2 Plochy znazornujıcı prumetny
Pro objekty, ve scenach pozıvane, jsem pouzil prıkaz umoznujıcı definovatnove funkce a procedury. Je to prıkaz:
#macro Nazev(parametr_1, ..., parametr_N)
...
#end.
Nove objekty se v tomto prostredı popisujı pro obecne parametry a teprve
az kdyz chceme objekt vykreslit parametry konkretizujeme. Vse jsem podrobneji
popsal na nasledujıcım prıkladu tvorby plochy ν.
//--------------------------- plocha xy0 ----------------------------
#declare H = 0.01;
#macro Plocha_xy0(Delka)
box { <-Delka, -Delka, -H/2>, <Delka, Delka, H/2>
pigment {color barva2p} }
#declare B = -Delka;
8
#while (B < Delka)
cylinder { <B, Delka, 0> <B, -Delka, 0> 2*H
pigment {color barva_dark} }
cylinder { <Delka, B, 0> <-Delka, B, 0> 2*H
pigment {color barva_dark} }
#declare B = B + 0.5;
#end
#end
Hodnota H udava sırku roviny. Text Plocha xy0(Delka) je odkaz, pomocı
ktereho se makro v popisu sceny vola. Parametr Delka udava delku a vysku
roviny smerem od pocatku. Naprıklad Plocha xy0(5) vykreslı ve scene plochu o
delce a vysce 10 jednotek (pet na kazdou stranu smerem od pocatku). Prıkazem
box vykresluji kvadr urceny souradnicemi spodnıho leveho a protejsıho hornıho
praveho vrcholu. Pomocı cyklu while jsem na rovinu pro lepsı predstavu nanesl
jeste ctvercovou sıt’. Vzdalenost techto”ordinal“ je na ose x vzdy 0,5 jednotky.
V prıloze jsou popsane jeste zbyle dve roviny π a µ.
2.3 Znazornenı bodu
Body jsem se rozhodl zobrazovat jako koule o malem polomeru.
//---------------------------- bod ----------------------------
#macro bod(S1, S2, S3, Polomer, Barva)
sphere { <S1, S2, S3>,
Polomer, pigment{color Barva} }
#end
Pri vykreslenı bodu pouziji, podobne jako u roviny, makro bod(S1, S2, S3,
Polomer, Barva). Parametry S1, S2, S3 udavajı souradnice bodu. Pro zo-
brazenı koule je potreba zadat jeste jejı polomer a barvu, coz jsou zbyle dva
parametry v makru.
2.4 Znazornenı prımky
Prımky jsem vykresloval jako valce o malem polomeru podstavy.
//-------------------------- primka ------------------------
#macro primka(P1, P2, P3, K1, K2, K3, Polomer, Barva)
9
cylinder { <P1, P2, P3>, <K1, K2, K3>,
Polomer, pigment {Barva} }
#end
Pro vykreslenı valce je potreba zadat souradnice stredu jeho spodnı a hornı
podstavy (P1, P2, P3, K1, K2, K3), polomer podstavy Polomer a opet barvu
telesa.
2.5 Znazornenı pomocnych car
V obrazcıch se take casto vyskytujı pomocne cary, ktere nahrazujı carkovane
prımky pri klasickem rysovanı. Pro jejich tvorbu jsem pouzil nasledujıcı marko.
Zvlast’ jsem rozlisoval svisle a vodorovne pomocne cary.
//----------------------- pomocna cara svisla ------------------------
#macro Pomocna_cara_svisla(P1, P2, P3, Q1, Q2, Q3, Polomer, Barva)
#declare A1 = P2;
#declare B1 = P2+0.3;
#while (B1 <= Q2)
cylinder {<P1, A1, P3> <P1, B1, P3> 3*Polomer pigment{Barva} }
#declare A1 = A1 + 0.6;
#declare B1 = B1 + 0.6;
#end
#end
//----------------------- pomocna cara vodorovna ---------------------
#macro Pomocna_cara_vodorovna(R1, R2, R3, S1, S2, S3, Polomer, Barva)
#declare A2 = R3;
#declare B2 = R3-0.3;
#while (B2 >= S3)
cylinder {<R1, R2, A2> <R1, R2, B2> 3*Polomer pigment{Barva} }
#declare A2 = A2 - 0.6;
#declare B2 = B2 - 0.6;
#end
#end
Jak si muzete vsimnout, tak pomocı cyklu while menım vzdy y-ovou (svisla
prımka) nebo z-ovou (vodorovna prımka) souradnici stredu podstav valce. A
to tak aby vzdy mezi jednotlivymi valci byla mezera, rovna jejich vysce. Tyto
souradnice menım tak dlouho, dokud hodnota na stredu hornı podstavy nenı
mensı nebo rovna zvolenemu parametru.
10
2.6 Znazornenı sipky
Pro znazornenı smeru otocenı roviny pri Mongeove promıtanı jsem si predem
nachystal sipku jdoucı smerem otocenı.
//-------------------------- sipka ---------------------------
#macro sipka(Polomer, Tloustka, Posun, Barva)
difference {
torus {Polomer, Tloustka pigment {color Barva}
rotate z*90
translate <Posun, 0, 0>}
box{ <Posun - 0.2, -2*Tloustka, - 2*Polomer + 2*Tloustka>
<Posun + 0.2, 2*Polomer + 2*Tloustka, 2*Polomer + 2*Tloustka>}
box{ <Posun - 0.2, - 2*Polomer + 2*Tloustka, -0.5>
<Posun + 0.2, 2*Tloustka, 2*Polomer + 2*Tloustka>} }
cone {<Posun, -Polomer + 0.05, -0.5>, 3*Tloustka
<Posun, -Polomer, -0.1>, 0 pigment {color Barva}}
#end
Pro jejı tvorbu jsem pouzil dve telesa. Zakladem sipky je anuloid (v textovem
souboru zvany torus), k nemu jsem musel udelat dva kvadry a z techto teles
jsem pote pomocı prıkazu pro rozdıl vytvoril oblouk sipky. Parametry sipky jsou
prvnı a druhy polomer anuloidu, souradnice udavajıcı jeho posun na ose x a barva
anuloidu. Aby vysledne teleso opravdu pripomınalo sipku, umıstil jsem jeste na
spodnı okraj vznikleho oblouku kuzel urcujıcı smer sipky.
2.7 Znazornenı roviny v obecne poloze
V obrazcıch, zamerujıcıch se na zobrazenı roviny, jsem pouzıval nasledujıcı
makro.
//-------------------------- rovina --------------------------
#macro rovina(Px1, Py1, Pz1, Px2, Py2, Pz2, Px3, Py3, Pz3,
Z_souradnice_D, Barva)
#declare ur1 = Px2-Px1 ; //vektor B-A
#declare ur2 = Py2-Py1 ; //vektor B-A
#declare ur3 = Pz2-Pz1 ; //vektor B-A
#declare vr1 = Px3-Px1 ; //vektor C-A
#declare vr2 = Py3-Py1 ; //vektor C-A
#declare vr3 = Pz3-Pz1 ; //vektor C-A
#declare vs1 = ur2*vr3-ur3*vr2 ; //vektorovy soucin
#declare vs2 = ur3*vr1-ur1*vr3 ; //vektorovy soucin
11
#declare vs3 = ur1*vr2-ur2*vr1 ; //vektorovy soucin
#declare d = -vs1*Px1-vs2*Py1-vs3*Pz1 ; // konst. d v rovnici roviny
#declare X_P = -d/vs1 ; // prusecik s osou x
//-------------------------- souradnice bod D ----------------
#declare Pz4 = Z_souradnice_D ;
#declare Px4 = (-d-vs3*Pz4)/vs1 ;
#declare Py4 = 0 ;
//-------------------------- rovina --------------------------
polygon {5, <Px1, Py1, Pz1>
<Px2, Py2, Pz2>
<Px3, Py3, Pz3>
<Px4, Py4, Pz4>
<Px1, Py1, Pz1>
pigment{Barva filter .8} }
#end
Rovinu jsem vykresloval pomocı prıkazu rovina(Px1, Py1, Pz1, Px2, Py2,
Pz2, Px3, Py3, Pz3, Z souradnice D, Barva). Parametry predstavujı sourad-
nice trı ruznych bodu urcujıcıch rovinu, z-ovou souradnici ctvrteho bodu D a
barvu roviny. Jelikoz jsem nechtel libovolnou rovinu vykreslovat jen jako”trojuhel-
nık“ potreboval jsem ze zadanych trı bodu zjistit i dalsı (ctvrty) bod roviny. Po-
mocı znalostı z analyticke geometrie jsem ze trı zvolenych bodu urcil normalovy
vektor dane roviny. Zvolil jsem si z-ovou souradnici bodu D a zbyle souradnice
nasledne dopocıtal. Samotnou rovinu jsem na zaver vykreslil pomocı prıkazu
pro tvorbu mnohouhelnıku polygon{pocet vrcholu+1, jejich souradnice,
barva}
2.8 Znazornenı hlavnıch prımek roviny
S rovinami v Mongeove promıtanı uzce souvisı hlavnı prımky roviny. Pro jejich
tvorbu jsem si opet napsal kratky skript, pomocı ktereho je ve scene vykresluji.
//-------------------------- hlavni primky 1 osnovy ------------------
#macro hl_primka_1(Px1, Py1, Pz1, Px2, Py2, Pz2, Px3, Py3, Pz3,
Z_roviny_Ro2, Y_roviny_Ro2, Polomer, Barva)
#declare u1 = Px2-Px1 ; // vektor B-A
#declare u2 = Py2-Py1 ; // vektor B-A
#declare u3 = Pz2-Pz1 ; // vektor B-A
#declare v1 = Px3-Px1 ; // vektor C-A
#declare v2 = Py3-Py1 ; // vektor C-A
#declare v3 = Pz3-Pz1 ; // vektor C-A
12
#declare vs1 = u2*v3-u3*v2 ; // vektorovy soucin 1
#declare vs2 = u3*v1-u1*v3 ; // vektorovy soucin 2
#declare vs3 = u1*v2-u2*v1 ; // vektorovy soucin 3
#declare d = -vs1*Px1-vs2*Py1-vs3*Pz1 ; // konst d v rovnici roviny
#declare Yp1 = Y_roviny_Ro2 ; // y souradnice rovina rezu
#declare Zp1 = Z_roviny_Ro2 ; // voleny bod
#declare Xp1 = ((-d-vs2*Yp1)/vs1)-(vs3*Zp1)/vs1 ;
#declare Yp2 = Y_roviny_Ro2 ;
#declare Zp2 = 0 ;
#declare Xp2 = ((-d-vs2*Yp2)/vs1)-(vs3*Zp2)/vs1 ;
cylinder { <Xp1, Yp1, Zp1> <Xp2, Yp2, Zp2>
Polomer pigment {Barva} }
#end
Jako parametry spoustejıcıho prıkazu pro tvorbu hlavnıch prımek prvnı osnovy
jsem zvolil opet tri body urcujıcı rovinu, z-ovou souradnici krajnıho bodu vykreslo-
vane hlavnı prımky, y-ovou souradnici roviny rezu, polomer podstavy valce znazor-
nujıcıho hlavnı prımku a barvu teto prımky. Zmınena rovina rezu je rovina σ
rovnobezna s povinou π a jejız prusecık se zadanou rovinou α je prave hledana
hlavnı prımka. Odvozene souradnice Xp1, Yp1, Zp1, Xp2, Yp2, Zp2 koncovych
bodu usecky, znazornujıcı hlavnı prımku, jsem zıskal z analytickeho vyjadrenı
pruniku rovin α a σ.
Analogickym zpusobem tvorım i hlavnı prımky druhe osnovy a prıkaz pro
jejich tvorbu je take k dispozici na prilozenem CD.
2.9 Znazornenı prımky kolme k rovine
Pro znazornenı kolmice ke zvolene rovine jsem vytvoril nasledujıcı makro.
//-------------------------- kolmice k rovine -------------------
#macro kolma_primka(Px1, Py1, Pz1, Px2, Py2, Pz2, Px3, Py3, Pz3,
bod_1, bod_2, bod_3, Parametr, Polomer, Barva)
#declare ur1 = Px2-Px1 ; //vektor B-A
#declare ur2 = Py2-Py1 ; //vektor B-A
#declare ur3 = Pz2-Pz1 ; //vektor B-A
#declare vr1 = Px3-Px1 ; //vektor C-A
#declare vr2 = Py3-Py1 ; //vektor C-A
#declare vr3 = Pz3-Pz1 ; //vektor C-A
#declare vs1 = ur2*vr3-ur3*vr2 ; //vektorovy soucin
#declare vs2 = ur3*vr1-ur1*vr3 ; //vektorovy soucin
#declare vs3 = ur1*vr2-ur2*vr1 ; //vektorovy soucin
13
//-------------------------- spodni bod primky -------------------
#declare Pp1 = bod_1 ;
#declare Pp2 = bod_2 ;
#declare Pp3 = bod_3 ;
//-------------------------- horni bod primky --------------------
#declare S = Parametr ; // parametr posunu horniho bodu
#declare Ph1 = Pp1 + S*vs1 ;
#declare Ph2 = Pp2 + S*vs2;
#declare Ph3 = Pp3 + S*vs3;
//-------------------------- primka ------------------------------
cylinder { <Pp1, Pp2, Pp3>,
<Ph1, Ph2, Ph3>,
Polomer pigment {Barva} }
#end
V tomto prıpade je parametru ve volajıcı funkci vıce. Jsou to opet souradnice trı
bodu urcujıcıch rovinu, ke ktere chceme kolmici konstruovat. Potom souradnice
krajnıho bodu kolmice lezıcıho v rovine π, parametr posunu, pomocı ktereho
zjist’uji druhy krajnı bod kolmice, a na zaver prumer a barva kreslene kolmice.
Pri tvorbe kolmice opet vychazım ze znalostı z analyticke geometrie, konkretne
toho, ze normalovy vektor roviny je smerovym vektorem hledane kolmice. A dale
z parametrickeho vyjadrenı prımky, kde pomocı zvoleneho parametru posunu a
spocıtaneho smeroveho vektoru najdu souradnice druheho krajnıho bodu kolmice.
2.10 Znazornenı znacky pro pravy uhel
S kolmicemi uzce souvisı dalsı objekt, ktery jsem si dopredu nadefinoval. Je
to znak pro pravy uhel.
//-------------------------- znak praveho uhlu --------------------------
#macro pravy_uhel(Polomer, Tloustka, Barva)
union {
intersection {
torus {Polomer, Tloustka pigment {color Barva} }
box {<0 ,0 - 0.15, 0>,
<Polomer + 0.15, 0 + 0.15, -Polomer - 0.15>
pigment {color Barva} }
}
sphere {<Polomer/2.8, 0, -Polomer/2.8>
Tloustka + 0.01 pigment {color Barva} }
}
#end
14
Parametry jsou polomer torusu, tvorıcı oblouk u teto znacky, tloust’ka tohoto
torusu a jeho barva. Oblouk jsem vytvoril pomocı pruniku vhodneho kvadru a
zmıneneho torusu. A pote co jsem oblouk vytvoril jsem k nemu jeste pripojil bod
o vhodnych souradnicıch. Ten znazornuje tecku ve znacce pro pravy uhel.
2.11 Znazornenı prusecıku prımek
Pri tvorbe nekolika scen jsem potreboval znat souradnice prusecıku prımek,
ktere byly zadany dvema svymi ruznymi body. Celou ulohu jsem rozdelil na
tri prıpady, podle toho kde se prımky, jejichz prusecık hledam, nachazı. Prusecık
prımek v narysne, v pudorysne a obecne v prostoru. Rozdelil jsem to tak z duvodu
lepsı prace se zıskanymi souradnicemi hledaneho bodu. Pro obsahlost celeho tex-
toveho souboru uvedu jen ukazku prusecıku prımek v narysne, zbyle prıpady jsou
analogicke a jsou opet k dispozici na prilozenem CD.
//-------------------------- prusecik primek --------------------------
#macro prusecik_primek_nar(Px1, Py1, Pz1, Px2, Py2, Pz2,
Px3, Py3, Pz3, Px4, Py4, Pz4, Polomer, Barva)
#declare un1 = Px2-Px1 ; //vektor C-A
#declare un2 = Py2-Py1 ; //vektor C-A
#declare un3 = Pz2-Pz1 ; //vektor C-A
#declare vn1 = Px4-Px3 ; //vektor G-E
#declare vn2 = Py4-Py3 ; //vektor G-E
#declare vn3 = Pz4-Pz3 ; //vektor G-E
#declare s = (un1*(Py1-Py3)+un2*(Px3-Px1))/(un1*vn2-vn1*un2) ;
#declare B1 = Px3 + s*vn1 ;
#declare B2 = Py3 + s*vn2 ;
#declare B3 = Pz3 + s*vn3 ;
sphere { <B1, B2, B3>, Polomer
pigment{color Barva} }
#end
Parametry jsou krajnı body usecek znazornujıcıch prımky jejichz prusecık hledame,
polomer koule, ktera bude prusecık znazornovat a barva teto koule. Tak jako v
predchozıch prıkladech si spocıtam smerove vektory prımek, pomocı nich vyjadrım
z parametrickych rovnic prımek parametr s a dıky nemu zjistım souradnice B1,
B2, B3 hledaneho prusecıku.
15
2.12 Znazornenı pomocne plochy
Dalsı objekt, ktery jsem si predem nadefinoval jsem nazval pomocnou plochou
a jedna se o ctyruhelnık usnadnujıcı predstavu o kolmem prumetu prımky do
narysny a pudorysny.
//-----------------------pomocne plochy-----------------------
#macro pomocne_plochy(PX1, PY1, PZ1,
PX2, PY2, PZ2)
polygon {5, <PX1, PY1, PZ1>,
<PX2, PY2, PZ2>,
<PX2, PY2, 0>,
<PX1, PY1, 0>,
<PX1, PY1, PZ1>
pigment {barva_rovina_svisla} }
polygon {5, <PX1, PY1, PZ1>,
<PX2, PY2, PZ2>,
<PX2, 0, PZ2>,
<PX1, 0, PZ1>,
<PX1, PY1, PZ1>
pigment {barva_rovina_vodorovna} }
#end
Parametry jsou jen krajnı body usecky, predstavujıcı prımku, ze ktere chceme
ctyruhelnıky konstruovat. Pote jsem vyuzil prıkazu pro tvorbu mnohouhelnıku
polygon a vhodne upravil jednotlive souradnice bodu ktere tvorı vrcholy kreslene-
ho ctyruhelnıku.
2.13 Znazornenı popisu objektu
Dulezite objekty jsem ve scenach popisoval textem, pro jehoz tvorbu jsem
vytvoril nasledujıcı marka. Rozlisoval jsem dva typy popisku. Prvnı, ktery je urcen
pro popisovanı rovin a druhy kterym popisuji vsechny zbyle objekty. Udelal jsem
to z duvodu snadnejsıho zadavanı prıkazu pro tvorbu tohoto textu a hlavne z
toho duvodu, ze roviny je zvykem popisovat reckymi pısmeny, zatımco objekty
jako body nebo prımky se popisujı pısmeny latinske abecedy.
//-------------------------- popisky --------------------------
#macro pismeno(Znak, Horni_Index_levy, Horni_Index_pravy, Dolni_Index,
Souradnice_X, Souradnice_Y, Souradnice_Z, Barva)
union{ text { ttf "tahoma", Znak, H, 0
16
pigment {Barva}
scale 0.5 }
text { ttf "tahoma", Horni_Index_levy, H, 0
pigment {Barva}
scale 0.3
translate <-0.3,0.26,0> }
text { ttf "symbol", Horni_Index_pravy, H, 0
pigment {Barva}
scale 0.35
translate <0.3,0.26,0> }
text { ttf "tahoma", Dolni_Index, H, 0
pigment {Barva}
scale 0.3
translate <0.3,-0.1,0> }
rotate camrot
translate <Souradnice_X, Souradnice_Y, Souradnice_Z> }
#end
#macro popis_roviny(Znak_p, Souradnice_Xp, Souradnice_Yp,
Souradnice_Zp, Barva_p)
text { ttf "symbol", Znak_p, H, 0
pigment {Barva_p}
scale 0.5
rotate camrot
translate <Souradnice_Xp, Souradnice_Yp, Souradnice_Zp> }
#end
U textu popisujıcıho jine objekty nez roviny jsou krome souradnic a barvy
textu jeste ctyri parametry. Prvnı tvorı hlavnı text, ktery se ma vykreslit a dalsı
tri parametry jsou jeho indexy. Jsou to po rade hornı levy, hornı pravy a dolnı
pravy index. U hornıho prave indexu pouzıvam styl textu symbol a dıky tomu
je index vykreslovan jako pısmeno recke abecedy. Jak si muzete vsimnout, tak
je zde pouzit parametr camrot, ktery je popsan a nadefinovan v kapitole 1.2,
pri popisu nastavenı kamery. Tento parametr zajistı natocenı textu smerem ke
kamere, dıky cemuz by mel byt text citelnejsı.
17
3 Mongeovo promıtanı modelovane pomocı pro-
gramu POV-Ray
3.1 Zobrazenı zakladnıch utvaru
3.1.1 Zobrazenı bodu
Mongeovo promıtanı je pravouhle promıtanı na dve k sobe kolme prumetny.
Jedna se obvykle znacı π a nazyva se pudorysna, druha se znacı ν a nazyva se
narysna. Bod v Mongeove promıtanı nejprve pravouhle promıtneme do pudorysny
π, jako bod A′, a do narysny ν, jako bod A2. Pote sklopıme kolem osy x pudorysnu
do narysny. Tım kazdemu dobu v prostoru jednoznacne priradıme dvojici bodu
v rovine, lezıcıch na jedne prımce (ordinale) kolme k ose x. Konkretne bod A′
sklopıme do bodu A1.
Obrazek 2: Zobrazenı bodu
18
Textovy soubor, pomocı ktereho program POV-Ray scenu vykreslı, se pokusım
popsat podrobne.
//------------------------------ bod ---------------------------
#include "colors.inc"
#include "pomocne_prvky.pov"
#declare camrot = <10,-37,0>;
camera { location <0, 0, -12> rotate camrot look_at <0, 0, 0>}
light_source{<250,250,-150> color White shadowless}
light_source{<10,15,-15> color White shadowless}
//------------------------ plochy ------------------------------
Plocha_xy0(4.5)
Plocha_x0z(4.5)
primka(-5, 0, 0, 5, 0, 0, 3*H, barva_dark) //osa x_1,2
//--------------------- souradnice bod A -----------------------
#declare Px1 = 2 ;
#declare Py1 = 2.2 ;
#declare Pz1 = -3 ;
//----------------------------- bod A --------------------------
bod(Px1, Py1, Pz1, 8*H, Primka) // bod A
bod(Px1, 0, Pz1, 7*H, Pomoc) // bod A’
bod(Px1, Py1, 0, 7*H, Pomoc) // bod A2
bod(Px1, Pz1, 0, 7*H, Pomoc) // bod A1
//-------------------------- pomocne cary ----------------------
Pomocna_cara_vodorovna(Px1, Py1, 0, Px1, Py1, Pz1, 0.01, Pomoc)
Pomocna_cara_svisla(Px1, 0, Pz1, Px1, Py1, Pz1, 0.01, Pomoc)
Pomocna_cara_svisla(Px1, Pz1, 0, Px1, Py1, 0, 0.01 Pomoc)
//-------------------------- sipky -----------------------------
sipka(3, 0.06, -3, Pomoc)
sipka(-Pz1, 0.02, Px1, Pomoc)
//------------------------------ popisky -----------------------
pismeno("A"," "," ", Px1 + 0.2, Py1, Pz1, Primka)
pismeno("A’",""," ", Px1 + 0.5, 0.2, Pz1 - 0.3, Primka)
pismeno("A"," ","2", Px1 + 0.3, Py1 + 0.1, - 0.3, Primka)
pismeno("A"," ","1", Px1 + 0.3, Pz1 + 0.2, - 0.3, Primka)
popis_roviny("p", 4.2, 0.2, -4.4 , barva_popis_roviny)
popis_roviny("n", 4.2, 4.2, -0.2 , barva_popis_roviny)
pismeno("x"," ","1,2", 5.2, 0, 0, barva_dark)
Nejprve jsem nacetl pomocne knihovny. Knihovnu nazvanou colors.inc ob-
sahujıcı barvy nadefinovane implicitne v programu POV-Ray a mnou vytvoreny
soubor pomocne prvky.pov popsany v prvnı kapitole. Ve scene tedy vykresluji
plochu π prıkazem Plocha x0z(4.5), plochu ν prıkazem Plocha xy0(4.5) a
osu x pomocı prıkazu primka(-5, 0, 0, 5, 0, 0, 3*H, barva dark). Jak si
19
muzete vsimnout, tak za parametr udavajıcı”tloust’ku“ osy jsem zvolil trojnaso-
bek sırky rovin 3*H. Abych nemusel neustale psat cıselne hodnoty souradnic bodu,
ktere chci kreslit, nadefinoval jsem si predem jejich hodnoty a dale jsem se na ne
jiz jen odkazoval.
//--------------------- souradnice bod A -----------------------
#declare Px1 = 2 ;
#declare Py1 = 2.2 ;
#declare Pz1 = -3 ;
Dalsı makra jsem pouzil i pro tvorbu zbytku sceny. Pomocı makra pro tvorbu
bodu jsem vykreslil bod A a jeho prıslusne prumety. U tvorby prumetu stacilo
vhodne zmenit zvolene souradnice. Dale jsem vykreslil nekolik pomocnych car,
ukazujıcıch promıtnutı bodu do prıslusne prumetny. Naprıklad pomocna cara
spojujıcı bod A a bod A2 je napsana takto:
//-------------------------- pomocne cary ----------------------
Pomocna_cara_vodorovna(Px1, Py1, 0, Px1, Py1, Pz1, 0.01, Pomoc)
Pro zlepsenı predstavy, jak vznika bod A1 jsem do sceny pridal jeste dve sipky
naznacujıcı smer sklopenı pudorysny do narysny.
sipka(3, 0.06, -3, Pomoc)
Na zaver jsem scenu doplnil popisky oznacujıcımi jednotlive objekty ve scene
vykreslovane.
20
3.1.2 Zobrazenı prımky
Prımka je v prostoru jednoznacne urcena dvema ruznymi body. Zname-li tyto
body, muzeme prımku zobrazit pomocı prumetu jednotlivych bodu, jejichz kon-
strukci jsem poslal v predchozı kapitole 3.1.1.
Obrazek 3: Zobrazenı prımky v obecne poloze urcena dvema body
Jak v tomto prıpade, tak i v nasledujıcıch prıkladech nebudu podrobne popiso-
vat cely zdrojovy text, ktery scenu popisuje. Uvedu jen nektere prvky, kterymi
se scena odlisuje od predchozıch obrazku. Cely textovy soubor je k dispozici na
prilozenem CD.
Nejprve jsem zvolil souradnice bodu A a B ktere ve zdrojovem kodu znacım
Px1, Py1, Pz1 a Px2, Py2, Pz2. Snazil jsem se docılit toho, aby se usecka,
znazornujıcı prımku, nevykreslovala jen od jednoho bodu k druhemu, ale aby i
pokracovala smerem dal od techto bodu. Musel jsem proto dopocıtat souradnice
21
smeroveho vektoru teto prımky a pomocı nich jsem nasledne zıskal souradnice
novych dvou bodu lezıcıch na teto prımce. Tyto body jsem zvolil jako krajnı
body usecky znazornujıcı kreslenou prımku.
//------------------------- prodlouzenı prımky ------------------------
#declare smer_vektor_x = Px2-Px1 ;
#declare smer_vektor_y = Py2-Py1 ;
#declare smer_vektor_z = Pz2-Pz1 ;
#declare prodluz1 = 0.1 ; // zvoleny parametr prodlouzenı
#declare prodluz2 = 1.1 ; // zvoleny parametr prodlouzenı
#declare prodl_x_kl = Px1 + prodluz2 * smer_vektor_x ;
#declare prodl_y_kl = Py1 + prodluz2 * smer_vektor_y ;
#declare prodl_z_kl = Pz1 + prodluz2 * smer_vektor_z ;
#declare prodl_x_za = Px1 - prodluz1 * smer_vektor_x ;
#declare prodl_y_za = Py1 - prodluz1 * smer_vektor_y ;
#declare prodl_z_za = Pz1 - prodluz1 * smer_vektor_z ;
Prımky tedy vykresluji prıkazy nasledujıcıho typu.
primka(prodl_x_za, prodl_y_za, prodl_z_za,
prodl_x_kl, prodl_y_kl, prodl_z_kl, 5*H, Primka)
Prumety prımky jsem vykreslil jen vhodnou upravou souradnic. Naprıklad:
//------------------ prumety primky -------------------------
primka(prodl_x_za, prodl_y_za, 0, // A2 B2
prodl_x_kl, prodl_y_kl, 0, 4*H, Prumet)
Pomocne cary jsem nevykresloval z krajnıch bodu usecky, ale prımo ze zadanych
bodu A,B.
Pomocna_cara_svisla(Px2, 0, Pz2, Px2, Py2, Pz2, 0.01 Pomoc)
Nove se ve scene objevujı pomocne plochy, ukazujıcı, jakym zpusobem se prımka
promıta do jednotlivych prumeten. Dıky vytvorenemu makru, ktere jsem popsal
v kapitole 2.12, k tomu stacil nasledujıcı prıkaz.
pomocne_plochy(Px1, Py1, Pz1, Px2, Py2, Pz2)
22
Nezname-li dva ruzne body prımky muzeme pro jejı sestrojenı vyuzıt prusecıky
s prumetnami, tzv. stopnıky prımky.
Obrazek 4: Zobrazenı prımky v obecne poloze
Zdrojovy kod teto sceny se od kodu predchozıho obrazku temer nelisı. Mısto
bodu A a B jsem zadal prımo souradnice stopnıku P a N . Opet jsem pocıtal
smerovy vektor a pote souradnice bodu prımky, ktere urcı konecnou podobu
usecky znazornujıcı prımku. Obdobne jako v predchozı uloze jsem pro lepsı nazor-
nost promıtnutı prımky do prumeten pouzil pomocne plochy.
23
3.1.3 Zobrazenı roviny
Rovinu lze v prostoru jednoznacne urcit nekolika zpusoby. Jak jsem jiz psal v
kapitole 2.7 budu rovinu urcovat tremi navzajem ruznymi nekolinearnımi body.
Presny postup vykreslenı roviny pomocı makra, ktere jsem za tımto ucelem
vytvoril, jsem take popsal v kapitole 2.7. Na obrazku je rovina znazornena cerve-
nym”obdelnıkem“, jehoz vrcholy lezı v prumetnach. Pri popisovanı roviny jsem
se drzel zavedeneho znacenı a stopy roviny jsem popisoval obvyklym zpusobem.
Jak si muzete vsimnout na obrazku, tak krome roviny samotne, jsem se rozhodl
zvyraznit jeste jejı prumet. Na obrazku je vykreslen jako sedy trojuhelnık v
narysne.
Obrazek 5: Zobrazenı roviny
Pri konstrukci mnoha uloh v Mongeove promıtanı se uzıva tzv. hlavnıch
prımek roviny. Jsou to prımky, ktere vzniknou jako prusecık dane roviny s rovi-
24
nou rovnobeznou s pudorysnou nebo narysnou. Nazyvajı se hlavnı prımky prvnı
osnovy a hlavnı prımky druhe osnovy.
Obrazek 6: Zobrazenı hlavnıch prımek prvnı osnovy
Pri tvorbe teto sceny jsem k vytvorene scene pro zobrazenı roviny pridal jeste
makro pro tvorbu hlavnı prımky prvnı osnovy, podrobneji popsaneho v kapitole
2.8.
//-------------------------- hlavni primka 1 -------------------------
hl_primka_1(Px1, Py1, Pz1, Px2, Py2, Pz2,
Px3, Py3, Pz3, -5, 1, 4*H, Hl_Primka)
Dale jsem vykreslil prumety teto prımky a pomocne cary k teto prımce. Pro lepsı
predstavu jsem se rozhodl jeste znazornit rovinu σ jako rovinu rovnobeznou s
narysnou, jejız prunik s rovinou α je hledana hlavnı prımka.
25
//-------------------------- rovina sigma ----------------------------
polygon{ 4, <Xp1, Yp1, Zp1>
<Xp1, Yp1, 0>
<Xp2, Yp2, Zp2>
<Xp1, Yp1, Zp1>
pigment {Gray45 filter .9} }
Temer stejnym zpusobem, jen zmenou prıslusnych souradnic, jsem vykreslil i
scenu s hlavnımi prımkami druhe osnovy. Pro tvorbu hlavnı prımky zde jsem ale
vyuzil makro:
//-------------------------- hlavni primka 2 -------------------------
hl_primka_2(Px1, Py1, Pz1, Px2, Py2, Pz2,
Px3, Py3, Pz3, 4, -2, 4*H, Hl_Primka)
Obrazek 7: Zobrazenı hlavnıch prımek druhe osnovy
26
3.2 Polohove ulohy
3.2.1 Dvojice prımek
Dve prımky v prostoru mohou byt totozne, rovnobezne, ruznobezne a mi-
mobezne. Ve sve praci jsem se rozhodl ukazat prıklady poslednıch dvou typu
vzajemnych poloh prımek, tedy ruznobezne prımky a mimobezne prımky.
Obrazek 8: Zobrazenı ruznobeznych prımek
V obou scenach jsem prımky urcil souradnicemi dvema jejich ruznych bodu.
Pouzil jsem makra pro tvorbu pomocnych ploch a pro vypocet souradnic prusecı-
ku techto prımek a jejich prumetu. Tyto prusecıky (na narysne, pudorysne i v
prostoru) jsem znazornil body zelene barvy. Z prusecıku v prumetnach jsem pote
jeste vedl kolmice k prımkam v prostoru, aby se lepe znazornila jejich vzajemna
poloha. Pokud se tyto kolmice protınajı v jednom bode (skutecnem prusecıku),
jsou dane prımky ruznobezne.
27
//------------------- prusecik primek ----------------------------
prusecik_primek_nar(Px1, Py1, 0, Px2, Py2, 0, Px3, Py3, 0,
Px4, Py4, 0, 0.1, SpringGreen) // a2_b2
prusecik_primek_pud(Px1, 0, Pz1, Px2, 0, Pz2, Px3, 0, Pz3, Px4,
0, Pz4, 0.1, SpringGreen) // a´_b´
prusecik_primek_3D(Px1, Py1, Pz1, Px2, Py2, Pz2, Px3, Py3, Pz3,
Px4, Py4, Pz4, 0.1, SpringGreen) // a_b
primka(B1, B2, B3,
D1, D2, D3, 4*H, SpringGreen)
primka(C1, C2, C3,
D1, D2, D3, 4*H, SpringGreen)
Pokud se kolmice neprotınajı, jsou dane prımky mimobezne.
Obrazek 9: Zobrazenı mimobeznych prımek
28
3.2.2 Dvojice rovin
Dve roviny mohou byt bud’ rovnobezne, ruznobezne a nebo incidentnı. Ja jsem
v teto praci vykresloval jen prıpad dvou ruznobeznych rovin. Jejich prunikem je
prımka. Kazdou rovinu jsem urcil tremi ruznymi body, tak jako tomu bylo v
kapitole 3.1.3. Vykreslil jsem stopy techto rovin a take jejich prusecıky. Prımka
spojujıcı tyto prusecıky je hledana prımka pruniku. Pro uplnost sceny jsem jeste
vykreslil prumety teto prımky.
Obrazek 10: Zobrazenı pruniku rovin
29
3.2.3 Prusecık prımky s rovinou
Tak jako v predchozıch prıkladech jsem rovinu urcil tremi jejımi body a se-
strojil jsem jejı stopy. Prımku jsem pro jednoduchost volil kolmou k rovine a k
jejımu vykreslenı jsem vyuzil makro pro tvorbu kolme prımky popsane v kapitole
2.9. Dale jsem vykreslil prumety teto prımky a pomocne cary k teto prımce.
Obrazek 11: Zobrazenı prusecıku prımky a roviny
Pro konstrukci prusecıku prımky s rovinou je potreba zvolit vhodnou pomoc-
nou rovinu λ, ktera prımku obsahuje.
//-------------------------- rovina lambda ------------------------
polygon {5, <Ph1, Ph2, Ph3>
<Ph1, 0, Ph3>
<Px1, 0, Pz1>
<Px1, Py1, Pz1>
<Ph1, Ph2, Ph3> pigment {Gray60 filter 0.7} }
30
Pote, co jsem zvolil vhodnou pomocnou rovinu, jsem tento prıklad resil podobne
jako prıklad pruniku dvou rovin 3.2.2. Vysledna prunik rovin α a λ je vykreslen
bılou barvou. Na zaver jsem ulohu resil jako v prıpade prusecıku dvou prımek,
viz. 3.2.1.
31
3.3 Metricke ulohy
3.3.1 Prımka kolma k rovine jdoucı danym bodem
Z konstrukcnıho hlediska se jedna o jednu z lehcıch uloh Mongeova promıtanı.
Pro prımku kolmou k rovine platı, ze jejı pudorys je kolmy k pudorysne stope
roviny a jejı narys je kolmy k narysne stope roviny. Tyto kolmice ke stopam dane
roviny se vedou z jednotlivych prumetu daneho bodu. Cela scena vypada potom
nasledovne.
Obrazek 12: Zobrazenı prımky kolme k rovine jdoucı danym bodem
Pri popisu scenu jsem vychazel z textove souboru popisujıcıho prusecık prımky s
rovinou popsaneho v kapitole 3.2.3. Odmazal jsem ale pomocnou rovinu λ samot-
nou prımku tvorıcı prusecık rovin λ a α a vsechny body a popisky s temito objekty
spojene. Nove jsem pridal bod M , jehoz souradnice jsem dopocıtal nasledovne.
32
//-------------------------- souradnice bodu M --------------------------
#declare Sm = 0.075;
#declare Pm1 = Pp1 + Sm*vs1;
#declare Pm2 = Pp2 + Sm*vs2;
#declare Pm3 = Pp3 + Sm*vs3;
//-------------------------- bod M --------------------------
bod(Pm1, Pm2, Pm3, 0.05, White)
Pomocna_cara_vodorovna(Pm1, Pm2, 0, Pm1, Pm2, Pm3, 0.01, Pomoc)
Pomocna_cara_svisla(Pm1, 0, Pm3, Pm1, Pm2, Pm3, 0.01, Pomoc)
bod(Pm1, Pm2, 0, 0.05, White)
bod(Pm1, 0, Pm3, 0.05, White)
Parametr Sm urcuje, jak bude bod M posunuty na prımce, jejız parametricka
rovnice je nadefinovana hned pod tımto parametrem. Po zjistenı techto souradnic
jsem jiz obvyklym zpusobem vykreslil bod M , jeho prumety a pomocne cary
spojujıcı tento bod se svymi prumety. Dale jsem zde pouzil znacku pro pravy
uhel popsanou v prvnı kapitole. Tyto znacky jsem ale musel prıslusnym zpusobem
otocit a posunout, pomocı prıkazu rotate a translate.
//-------------------------- pravy uhel -------------------------
object {pravy_uhel(0.5, 0.04, Prumet)
rotate<90, 0, 31> translate<1.7, 1.9, 0>}
object {pravy_uhel(0.5, 0.04, Prumet)
rotate<0, 135, 0> translate<1.25, 0, -3.2>}
33
3.3.2 Rovina kolma k prımce jdoucı danym bodem
Opet jsem vychazel z textoveho souboru popisujıcıho scenu prusecıku prımky
a roviny (kapitola 3.2.3). Jako bod, kterym se ma rovina, kolma k prımce, zkon-
struovat, jsem zvolil bod P zvyrazneny na obrazku bılou barvou. Pro znazornenı
konstrukce jsem do sceny pridal prumety hlavnı prımky prvnı osnovy jdoucı bo-
dem P .
Obrazek 13: Zobrazenı roviny kolme k prımce jdoucı danym bodem
34
3.4 Aplikace zakladnıch uloh
3.4.1 Prunik trojuhelnıku
Pro vykreslenı sceny jsem vychazel ze zadanych souradnic dvou trojuhelnıku
ABC a PMN . Pote jsem pomocı prıkazu polygon vykreslil samotne trojuhelnıky.
Pro vetsı prehlednost jsem se rozhodl vykreslit jeste hrany spojujıcı jednotlive
vrcholy trojuhelnıku a take prımo zadane body tvorıcı tyto vrcholy. Na zaver
jsem uz jen zvolil barevne schema a scenu popsal prıslusnymi popisky.
Obrazek 14: Zobrazenı pruniku trojuhelnıku
3.4.2 Prusecık prımky s jehlanem
U teto sceny jsem na zacatku urcil souradnice bodu podstavy jehlanu a jeho
vrcholu. A take souradnice dvou bodu urcujıcıch prımku. Samotny jehlan jsem
35
vykreslil jako teleso slozene z ploch, ktere jsou urceny vzdy prıslusnymi body.
Naprıklad bocnı stena EFV :
polygon{4 <Ex1, Ey1, Ez1>
<Fx1, Fy1, Fz1>
<Vx1, Vy1, Vz1>
<Ex1, Ey1, Ez1>
pigment {color teles2} }
Pro vetsı prehlednost jsem jeste vykreslil prıslusne hrany jehlanu a body ve
vrcholech jehlanu. Samotnou prımku jsem vykreslil jako usecku spojujıcı dva
zadane body. Na zaver jsem opet zvolil barevne schema a scenu popsal.
Obrazek 15: Zobrazenı prusecıku prımky s jehlanem
36
3.4.3 Prunik hranolu a jehlanu
Tak jako v predchozıch scenach jsem nejprve zadal souradnice vrcholu teles,
pote vykreslil hrany, vrcholy a steny techto teles. Cela scena potom vypada
nasledovne.
Obrazek 16: Zobrazenı pruniku hranolu a jehlanu
3.4.4 Rez rotacnıho kuzelu rovinou
Jako poslednı scenu jsem se rozhodl zobrazit rez rotacnıho kuzelu rovinou.
Kuzel jsem vykreslil pomocı nasledujıcıch prıkazu, kde souradnice boduA predsta-
vujı vrchol jehlanu a souradnice bodu B stred podstavy.
cone { <Ax1, Ay1, Az1>, 1.5,
<Bx1, By1, Bz1>, 0
pigment {color Kuzel} }
37
Rovinu jsem vytvoril pomocı makra pro kreslenı rovin.
rovina (Px1, Py1, Pz1, Mx1, My1, Mz1, Nx1, Ny1, Nz1, -5.5, Rez)
Body P,M,N jsou tri body, ktere jsem si urcil pro vytvorenı teto roviny. Samotny
rez jsem se rozhodl jeste zvyraznit cernou barvou.
difference {
object{
union{
cone {<Ax1, Ay1, Az1>, 1.5,
<Bx1, By1, Bz1>, 0 pigment {color Kuzel} }
rovina (Px1, Py1, Pz1, Mx1, My1, Mz1, Nx1, Ny1, Nz1, -5.5, Rez)
}
}
object{
intersection {
cone {<Ax1, Ay1, Az1>, 1.5,
<Bx1, By1, Bz1>, 0 }
rovina (Px1, Py1, Pz1, Mx1, My1, Mz1,
Nx1, Ny1, Nz1, -5.5, Black)
}
}
}
Nejprve jsem vytvoril dva objekty. Prvnı je tvoren spojenım kuzelu a roviny a
druhy je tvoren prunikem techto teles. Kdyz jsem z techto objektu potom vytvoril
rozdıl, tak scena vypadala nasledovne.
38
Obrazek 17: Zobrazenı rezu rotacnıho kuzelu rovinou
39
Zaver
V teto praci jsem resil vybrane problemove ulohy z Mongeova promıtanı, snazil
jsem se o to aby zobrazovana scena byla co nejnazornejsı a aby si pri pohledu na
ni mohl student udelat lepsı predstavu, jak obraz ve skutecnosti vypada. Zdrojove
kody jednotlivych scen jsem do prace vypisoval ve zkracene tvorbe a jen slovne
jsem okomentoval, jak jsem scenu tvoril. Originalnı textove soubory, popisujıcı
scenu, jsou k dispozici na prilozenem CD.
Cela prace by mohla slouzit jako navod k tomu, jak vytvorit pomocne obrazky,
ktere by se pri vyuce Mongeova promıtanı mohli studentum promıtat. Obrazky
jsem se snazil tvorit takovym zpusobem, aby si je kazdy mohl rychle a jednoduse
upravit dle svych potreb (naprıklad zmenou souradnic umıstenı kamery, objektu,
pruhlednost objektu atd.).
V seznamu prilozene literatury jsou k dispozici predevsım internetove stranky,
ze kterych jsem cerpal, zabyvajıcı se tvorbou scen v progamu POV-Ray. Vsem,
kterı by se chteli o praci v tomto programu dovedet neco vıce, a kterı by chteli
sami zkusit sceny vytvarek, tyto stranky vrele doporucuji.
40
Literatura
[1] Urban A., Deskriptivnı geometrie 1, Statnı nakladatelstvı technicke liter-
atury, Praha 1965
[2] Internetova stranka, ze ktere je program POV-Ray volne ke stazenı
http://www.povray.org/
[3] Internetove stranky Andrey a Friedricha A. Lohmuller
http://f-lohmueller.de/index.htm
[4] Internetove stranky pana Jirıho Dolezala zabyvajıcı se mimojine pocıtacovou
grafikou
http://mdg.vsb.cz/jdolezal/Pgrafika/Pgrafika.html
[5] Internetova stranka, s vypisem preddefinovanych barev
http://www.buckosoft.com/ dick/pov/colors.php
[6] Server Grafika on-line
http://www.grafika.cz/art/3d/povray.html
41