Transformacija pogleda
Na slici Euklidova šetnja (Les Promenades d'Euclide), belgijski umetnik Rene Magrit (Magritte) predstavlja nam obmanu oka koje perspektivu jednog pariskog bulevara gotovo ne razlikuje od konusnog oblika jedne srednjevekovne građevine.
|
| Sl. 1. Rene Magrit, Euklidova šetnja, 1955, ulje na platnu (Minneapolis Institute of Arts) |
Ovakve dvosmislenosti i druge obmane čula vida navode nas na traženje preciznog formalnog “jezika” kojim bi računskoj mašini preneli naše geometrijske ideje na jednoznačan način. Međutim, ova slika sadrži i “priču” upravo o onom optičko-geometrijskom odnosu o kome ovde raspravljamo i koji se zove transformacija pogleda. Naime, na Magritovoj slici rađenoj u tehnici ulje ne platnu, vidimo jedan veliki prozor nekog pariskog salona ispred koga stoji slikarski stafelaj na kome je tek završeno platno na kome se vidi deo pariskog pejzaža. Deo objektivne stvarnosti tako je verno prenet na platno da se više ne razlikuje od stvarnosti. Slikarsko platno možemo poistovetiti sa ekranom računara, a naslikano platno na štafelaju sa vidnim poljem koje se u grafici zove vjuport (viewport). Na pravougaonom polju vjuporta, umetnik predstavlja deo realnosti (bulevar i kulu) koji vidi kroz prozor. Ovaj prozor se u grafici zove svetski prozor (world window). Sada ostaje samo da slikarsko platno zamenimo ekranom računara.
Prvi korak u tom pravcu je definisanje “okvira” na ekranu računara u kome ćemo raditi i razvijati neki naš projekat. Taj se “okvir” zove se ekranski prozor i predstavljen je pravougaonikom čija donja stranica predstavlja ekransku
x−x− size 12{x - {}} {}koordinatu, dok leva, vertikalna stranica predstavlja ekransku
y−y− size 12{y - {}} {}koordinatu (Slika 2, desno).
 |
| Sl. 2. “Window-to-viewport” transformacija (transfrmacija pogleda) |
U ekranski prozor smeštamo sliku koju obrađujemo. Format slike, po pravilu je manji od formata ekranskog prozora, i takodje po pravilu je i sam pravougaon. Taj novi, manji pravougaonik, koji sadrži sliku na kojoj radimo, je
vjuport. Dakle, vjuport sadrži sliku koju obrađujemo i koja je transformisana slika neke realne scene iz fizičkog sveta. Okvir te realne slike, kao što je već naglašeno je
svetski prozor (
world window) a odgovarajuće koordinate, postavljene na analogan način kao i ekranske, zovu se
svetske koordinate. Na Slici 2 (levo), svetske koordinate su označene sa
XX size 12{X} {}i
YY size 12{Y} {}. Koordinatni sistem
(X,Y)(X,Y) size 12{ \( X,Y \) } {} zove se
svetski koordinatni sistem.
Na osnovu rečenog, možemo naslutiti da je potrebno, bilo preračunati svetske koordinate u ekranske, bilo obrnuto. Lako je ustanoviti da je odnos svetskih
(X,Y)(X,Y) size 12{ \( X,Y \) } {} i ekranskih koordinata
(x,y)(x,y) size 12{ \( x,y \) } {} dat linearnom vezom
(1)
x=aX+e,y=dY+fx=aX+e,y=dY+f size 12{x= ital "aX"+e,~~y= ital "dY"+f} {},
pri čemu su
a,e,d,fa,e,d,f size 12{a,e,d,f} {} realne konstante i pritom je
a≠0,d≠0.a≠0,d≠0. size 12{a <> 0,~d <> 0 "." } {} Ova transformacija je u računarskoj grafici poznata kao transformacija pogleda ili, preciznije window-to-viewport transformacija. Pravougaonik, čije su stranice paralelne koordinatnim osama je potpuno definisan ukoliko poznajemo koordinate njegovog donjeg levog i gornjeg desnog temena. Dakle, svetski prozor je definisan sa dva uređena para
(X1,Y1)(X1,Y1) size 12{ \( X rSub { size 8{1} } ,Y rSub { size 8{1} } \) } {} i
(X2,Y2)(X2,Y2) size 12{ \( X rSub { size 8{2} } ,Y rSub { size 8{2} } \) } {}, pri čemu, neka je
X1<X2X1<X2 size 12{X rSub { size 8{1} } <X rSub { size 8{2} } } {} i
Y1<Y2Y1<Y2 size 12{Y rSub { size 8{1} } <Y rSub { size 8{2} } } {} , što u stvari znači da je
(X1,Y1)(X1,Y1) size 12{ \( X rSub { size 8{1} } ,Y rSub { size 8{1} } \) } {} njegovo donje levo, a
(X2,Y2)(X2,Y2) size 12{ \( X rSub { size 8{2} } ,Y rSub { size 8{2} } \) } {} gornje desno teme. Ako na sličan način obeležimo i donje levo tj. gornje desno teme vjuporta, tj. sa
(x1,y1)(x1,y1) size 12{ \( x rSub { size 8{1} } ,y rSub { size 8{1} } \) } {} i
(x2,y2)(x2,y2) size 12{ \( x rSub { size 8{2} } ,y rSub { size 8{2} } \) } {}, mogućne su dve situacije.
|
| Sl. 3. Direktna i inverzna “window-to-viewport” transformacija |
- Poznata je transformacija (1), tj. konstante
a,e,d,fa,e,d,f size 12{a,e,d,f} {} i jedan od dva pravougaonika (window ili viewport). Tada iz (1) izračunavamo drugi.
- Poznati su window
P={(X1,Y1),(X2,Y2)}P={(X1,Y1),(X2,Y2)} size 12{P= lbrace \( X rSub { size 8{1} } ,Y rSub { size 8{1} } \) , \( X rSub { size 8{2} } ,Y rSub { size 8{2} } \) rbrace } {} i viewport
p={(x1,y1),(x2,y2)}p={(x1,y1),(x2,y2)} size 12{p= lbrace \( x rSub { size 8{1} } ,y rSub { size 8{1} } \) , \( x rSub { size 8{2} } ,y rSub { size 8{2} } \) rbrace } {}. Tada se koeficijenti transformacije (1) izračunavaju iz sistema jednačina
(2)
x1=aX1+e,x2=aX2+e,x1=aX1+e,x2=aX2+e,alignl { stack {
size 12{x rSub { size 8{1} } = ital "aX" rSub { size 8{1} } +e,} {} #
x rSub { size 8{2} } = ital "aX" rSub { size 8{2} } +e, {}
} } {} tj.
y1=dY1+f,y2=dY2+f,y1=dY1+f,y2=dY2+f,alignl { stack {
size 12{y rSub { size 8{1} } = ital "dY" rSub { size 8{1} } +f,} {} #
y rSub { size 8{2} } = ital "dY" rSub { size 8{2} } +f, {}
} } {}
odakle se dobijaju koeficijenti window-to-viewport transformacije
a
=
x
2
−
x
1
X
2
−
X
1
,
e
=
x
1
−
aX
1
=
x
1
X
2
−
X
1
x
2
X
2
−
X
1
a
=
x
2
−
x
1
X
2
−
X
1
,
e
=
x
1
−
aX
1
=
x
1
X
2
−
X
1
x
2
X
2
−
X
1
size 12{a= { {x rSub { size 8{2} } - x rSub { size 8{1} } } over {X rSub { size 8{2} } - X rSub { size 8{1} } } } ,``e=x rSub { size 8{1} } - ital "aX" rSub { size 8{1} } = { {x rSub { size 8{1} } X rSub { size 8{2} } - X rSub { size 8{1} } x rSub { size 8{2} } } over {X rSub { size 8{2} } - X rSub { size 8{1} } } } } {}
d
=
y
2
−
y
1
Y
2
−
Y
1
,
f
=
y
1
−
dY
1
=
y
1
Y
2
−
Y
1
y
2
Y
2
−
Y
1
.
d
=
y
2
−
y
1
Y
2
−
Y
1
,
f
=
y
1
−
dY
1
=
y
1
Y
2
−
Y
1
y
2
Y
2
−
Y
1
.
size 12{d= { {y rSub { size 8{2} } - y rSub { size 8{1} } } over {Y rSub { size 8{2} } - Y rSub { size 8{1} } } } ,``f=y rSub { size 8{1} } - ital "dY" rSub { size 8{1} } = { {y rSub { size 8{1} } Y rSub { size 8{2} } - Y rSub { size 8{1} } y rSub { size 8{2} } } over {Y rSub { size 8{2} } - Y rSub { size 8{1} } } } "." } {}
Primetimo da se transformacija (1) može napisati u matričnom obliku
(3)
xy=a00dXY+ef,xy=a00dXY+ef, size 12{ left ( matrix {
x {} ##
y
} right )= left ( matrix {
a {} # 0 {} ##
0 {} # d{}
} right )` left ( matrix {
X {} ##
Y
} right )+ left ( matrix {
e {} ##
f
} right ),} {}
tako da se inverzna transformacija moze izračunati primenom inverzne matrice
X
Y
=
a
0
0
d
−
1
x
y
−
e
f
,
X
Y
=
a
0
0
d
−
1
x
y
−
e
f
,
size 12{ left ( matrix {
X {} ##
Y
} right )= left ( matrix {
a {} # 0 {} ##
0 {} # d{}
} right ) rSup { size 8{ - 1} } left lbrace left ( matrix {
x {} ##
y
} right ) - left ( matrix {
e {} ##
f
} right ) right rbrace ,} {}
tj.
X
Y
=
1
/
a
0
0
1
/
d
x
−
e
y
−
f
.
X
Y
=
1
/
a
0
0
1
/
d
x
−
e
y
−
f
.
size 12{ left ( matrix {
X {} ##
Y
} right )= left ( matrix {
1/a {} # 0 {} ##
0 {} # 1/d{}
} right )` left ( matrix {
x - e {} ##
y - f
} right ) "." } {}
{}
Tako se najzad dobija
X=(x−e)/a,Y=(y−f)/d,X=(x−e)/a,Y=(y−f)/d, size 12{X= \( x - e \) /a,~Y= \( y - f \) /d,} {} ili
X
=
X
2
−
X
1
x
2
−
x
1
x
−
x
1
X
2
−
x
2
X
1
x
2
−
x
1
,
Y
=
Y
2
−
Y
1
y
2
−
y
1
y
−
y
1
Y
2
−
y
2
Y
1
y
2
−
y
1
.
X
=
X
2
−
X
1
x
2
−
x
1
x
−
x
1
X
2
−
x
2
X
1
x
2
−
x
1
,
Y
=
Y
2
−
Y
1
y
2
−
y
1
y
−
y
1
Y
2
−
y
2
Y
1
y
2
−
y
1
.
size 12{X= { {X rSub { size 8{2} } - X rSub { size 8{1} } } over {x rSub { size 8{2} } - x rSub { size 8{1} } } } x - { {x rSub { size 8{1} } X rSub { size 8{2} } - x rSub { size 8{2} } X rSub { size 8{1} } } over {x rSub { size 8{2} } - x rSub { size 8{1} } } } ,~Y= { {Y rSub { size 8{2} } - Y rSub { size 8{1} } } over {y rSub { size 8{2} } - y rSub { size 8{1} } } } y - { {y rSub { size 8{1} } Y rSub { size 8{2} } - y rSub { size 8{2} } Y rSub { size 8{1} } } over {y rSub { size 8{2} } - y rSub { size 8{1} } } } "." } {}
Direktna i inverzna transformacija prikazane su na Slici 3.
Naravno,
aa size 12{a} {} i
dd size 12{d} {} moraju biti različiti od 0 inače bi transformacija (1) bila loše definisana. Uslovi
a≠0,d≠0a≠0,d≠0 size 12{a <> 0,d <> 0} {} se zovu uslovi regularnosti, i pod tim uslovima transformacija (1) tj. (3) je regularna.
U slučaju da bilo
aa size 12{a} {} ili
dd size 12{d} {} ili pak istovremeno
aa size 12{a} {} i
dd size 12{d} {} budu = 0, transformacija je degenerisana. Degenerisana transformacija u ovom slučaju znači da slika pravougaonika P nije pravougaonik već geometrijski objekat niže dimenzionalnosti. Tako, ako je
a=0,d≠0,a=0,d≠0, size 12{a=0,d <> 0,} {} slika degeneriše u duž koja se poklapa sa levom vertikalnom stranicom pravougaonika p. Ako je
a≠0,d=0,a≠0,d=0, size 12{a <> 0,d=0,} {} pravougaonik P se preslikava u donju osnovu (dakle opet u duž), dok se u slučaju a = 0, d = 0, pravougaonik P preslikava u tačku
(e,f),(e,f), size 12{ \( e,f \) ,} {} koja je u regularnom slučaju donje levo teme vjuporta p. Sva tri slučaja degenerisane transformacije prikazana su na Slici 4.
|
| Sl. 4. Degenerisani slučajevi “window-to-viewport” transformacije |