programiranje grafike v prejsnjih poglavjih smo spoznali naprave ki delujejo ali v vektorskem ali rasterskem nacinu izkazalo se je da je rasterski nacin prevladujoc saj podpira mnozico prijemov ki se uporabljajo v vecini modernih aplikacij prvic rasterski nacin omogoca polnjenje slikovnih povrsin z enotno barvo ali vzorcev z vec barvami vektorski nacin v najboljsem primeru lahko le simulira zapolnjeno povrsino z mnozico paralelnih vektorjev drugic rasterski nacin prikazovanja hrani s liko na nacin ki omogoca njeno preprosto uporabo vsak posamezen piksel se lahko bere ali pise tudi del slike se lahko premika ali podvaja osnovni graficni algoritmi za d risanje risanje linij crt rastersko skanirni algoritem za prikazovanje linij najprej izracuna koordinate pikslov ki lezijo poleg idealne linije neskoncno tanke crte v d rasterski mrezi ce predpostavimo da je odstopanje najvec piksel kaksne lastnosti mora imeti algoritem za crte znotraj naklona najvec ali to pomeni da je najvec piksel osvetljen v stolpcu ce je crta izven odklona oziroma je osvetljen piksel v vrstici sl a a b slika a idealna premica narisana s skaniranjem crnih pikslov b piksli v mrezi ki jo uporabljamo pri metodi premice skozi srednjo tocko m med tockama v e in sv ne izbiramo naslednji piksel a metoda s povecevanjem najenostavnejsi algoritem temelji na nacelu racunanja naklona z enacbo dx dy povecevanja za pri cemer zacnemo v najbolj levi tocki izracunavanja yi m xi b za vsak xi in osvetljevanjem piksla xi round yi pri tej metodi izberemo piksle ki so najblizji pravi resnicni liniji torej je odmik do linije najmanjsi njegova slabost je da zahteva precej racunanja mnozenja sestevanja klicanja podprogramov v plavajoci vejici pv toliksnemu racunaju se ognemo tako da mnozenje poenostavimo yi m xi b m xi dx b yi m dx ce je dx tedaj je yi yi m ce se x spremeni za se y poveca za m koeficient naklona krivulje za vse tocke xi yi na liniji torej velja ce je xi xi tedaj je yi yi m to pomeni da sta vrednosti x in y doloceni s svojima predhodnikoma sl slika metoda risanja premice s povecevanjem in zaokrozevanjem funkcijske vrednosti xi yi b metoda srediscne tocke zaokrozevanje y na na celo vrednost prav tako kot izracun naklona m so operacije z realnimi vrednostmi torej casovno zahtevne zato je bil razvit algoritem ki temelji samo na racunanju s celimi stevili predpostavimo da je naklon linije med in drugo krivuljo z drugacnim m lahko naredimo z zrcaljenjem preko osnovne osi skrajno levo tocko bomo oznacili z x y in skrajno zgornjo desno z x y predpostavimo da je linija taka kot je na sl b zadnji izbran piksel je crn piksel ki ga trenutno iscemo je oznacen s praznima krogoma naslednji piksel iscemo med tremi svetlimi tockami oznacimo pravkar izbran piksel z xp yp tedaj moramo izbirati med naslednjima desnima piksloma vzhodnim v pomaknjenim za v desno in severo vzhodnim sv pomaknjenim za mesto v desno in eno mesto gor naj bo q tocka sekanja med linijo in rastersko linijo vertikalo algoritem srednje tocke poteka na sledec nacin izracunamo se razliko med tockama q in v ter q in sv predznak razlike pove kateri piksel je blizji tocki q osnovna zamisel algoritma in kar nas zanima je ali gre linija nad srednjo tocko m ali pod njo ce gre nad izberemo piksel sv severo vzhodno sicer v vzhodno napaka risanja je vselej £ predpostavimo linijo z implicitno funkcijo in koeficienti a b in c f x y ax by c ce je dy y y in dx x x tedaj lahko premico zapisemo kot y dy dx x b in od tod dobimo obliko f x y dy x dx y b dx hitro lahko ugotovimo da je f x y na premici enaka pozitivna za tocke pod linijo in nagativna nad njo ce torej vpeljemo kriterij srednje tocke moramo samo izracunati f m f xp yp in opazovati testirati predznak vpeljimo odlocitveno spremenljivko d d f xp yp po definiciji je d a xp b yp c ce je d izberemo piksel sv ce je d tedaj izberemo piksel v ce pa je d tedaj izberemo enega ali drugega torej v v nadaljevanju se vprasamo kaj se zgodi s tocko m in v ko racunamo naslednjo tocko predvsem je to odvisno katero tocko smo izbrali sv ali v ce izberemo v se m poveca za le v smeri osi x dnovi f xp yp a xp b yp c medtem ko je dstari a xp b yp c ce torej odstejemo dstari od dnovi dobimo dnovi dstari a torej je povecanje inkrement v smeri v torej d v a dy vidimo da dobimo novo vrednost preprosto iz stare ce ji pristejemo povecanje ce izberemo sv se m poveca za v smeri osi x in y dnovi f xp yp a xp b yp c ce odstejemo dstari od dnovi dobimo povecanje dnovi dstari a b torej je povecanje v smeri sv d sv a b dy dx predpostavimo zacetno tocko x y in dolocimo srednjo tocko x y torej f x y a x b y c a x b y a b c f x y a b za tocko na premici velja f x y torej je povecanje dstart a b dy dx enacbo lahko tudi mnozimo z da se ognemo deljenju saj nas kot smo ze omenili tu zanima samo predznak a b slika a kvadrant kroga smo ga narisali s povecevanjem za en korak po osi x in z izracunom ustrezne zaokrozene vrednosti y b metoda osmih simetricnih tock na kroznici risanje krogov enacba kroga je x y r ce krog ni v srediscu se premakne v sredisce tako da se pristeje neko celostevilcno vrednost ce enacbo resimo za y dobimo y ± Ö r x ce narisemo en kvadrant sl a dobimo ostale kvadrante s preslikovanjem torej s simetrijo ce torej x povecujemo od do r po korakih tedaj izracunamo korak za y ta preprosta metoda sicer deluje vendar ima nekaj pomanjkljivosti za vrednosti x » r se izkaze da nastane velika luknja v mnozici tock a metoda mih simetrij krog lahko narisemo tako da upostevamo vecjo simetrijo kroznice predpostavimo da poznamo center kroznice ce je tocka x y na kroznici tadaj lahko trivialno izracunamo se ostalih tock tako kot kaze sl b izkaze se da je dovolj da narisemo segment ° in ze imamo celo kroznico ce nam risanje tock dela funkcija circlepoint tedaj bi za risanje kroznice napisali void circlepoint float x float y int pix writepix x y value value je vrednost piksla writepix y x value writepix y x value writepix x y value writepix x y value writepix y x value writepix y x value writepix x y value b metoda srediscne tocke algoritem je podoben onemu za risanje linij temelji na izracunu vseh moznih tock na kroznici predpostavimo ° kroga torej kvadrant pri x in x y r Ö uporabili bomo funkcijo circlepoint ki smo jo imeli ze prej tako kot pri linijskem algoritmu tudi tukaj izbiramo kateri od dveh pikslov je blizji kroznici to zopet naredimo z racunanjem kroznice in iskanjem srednje tocke med piksloma glej sl ce je zadnji izbran piksel oznacen s p xp yp tedaj iscemo blizje piksle med v in jv slika mreza pikslov za algoritem srednje tocke m in dveh pikslov v e in jv se med katerima izbiramo naj bo f x y x y r funkcija je ce sta x' in y' na kroznici medtem ko je ce sta zunaj kroznice takoj lahko vidimo da srednja tocka m med piksloma v in jv lezi znotraj kroznice torej je v blizje kroznici ce bi bila srednja tocka zunaj kroznice tedaj bi bila tocka jv blizje kroznici naj bo d odlocitvena spremenljivka ki pomeni vrednost v srediscni tocki torej dstari f xp yp xp yp r ce je dstari izberemo tocko v in naslednjo srediscno tocko ki je za x x naprej tako dobimo dnovi f xp yp xp yp r in dnovi dstari xp torej je povecanje inkrement d v xp ce je dstari ³ izberemo jv tocko in koordinati dobita novi vrednosti za x x in y y tako dobimo novo tocko dnovi f xp yp xp yp r kjer je dnovi dstari xp yp tedaj je povecanje inkrement d jv xp yp ce vemo da zacnemo v tocki x in y r tedaj je naslednja tocka x y r od tu izracunamo f r r r r r od tu naprej delamo podobno kot smo pri risanju premice zapolnjevanje pravokotnikov zapolnjevanje likov lahko razdelimo na dva dela kateri piksel bomo zapolnili to je seveda odvisno od oblike lika s kaksno barvo ga bomo zapolnili obarvali ce zelimo zapolniti lik z eno samo barvo predpostavimo da piksel lezi na skanirni liniji ki gre od leve proti desni to pomeni da vsako povezavo spoj zapolnemo od xmin do xmax povezave izkoriscajo prostorsko zvezno skladnost saj se piksli eden od drugega ne menjajo a b c slika a poligon in skanirna linija b odebeljevanje tanke linije s ponavljanjem pikslov v stolpcu oziroma c s peresom ki ima pravokotno konico za like zatemnjenih oblik kjer so vsi piksli na eni povezovalni liniji se dajo na isto vrednost torej govorimo o skladnosti povezav pri takih zasencenih likih govorimo o veliki linijski skanirni skladnosti u porabljamo tudi skladnost robov za robove likov funkcija za zapolnjevanje pravokotnikov bi bila videti takole for y ymin do ymax for x xmin do xmax writepix x y pix zapolnjevanje mnogokotnikov poligonov opisani skanirni algoritem je dober tako za konveksne kot konkavne oblike in tudi take ki se sekajo ali imajo luknje na sredi na sl a vidimo osnovni mnogokotnik ki ga seka skanirna linija kar moramo narediti je da ugotovimo kateri piksli na skanirni liniji so znotraj poligona in jih postaviti na zeleno barvo v nasem primeru za y gre linija od x do in x do piksle na liniji moramo postaviti na zahtevano vrednost ce ponavljamo proces za vsako skanirno linijo posebej tedaj zajemamo celotni poligon tako kot kaze sl na sl a vidimo piksle na konceh lika obarvne crno tiste znotraj pa sivo preprost nacin kako dobimo koncne tocke je uporaba sredinske tocke skanirnega algoritma in tabeliranje robnih tock za vsako skanirno linijo kadar se dva poligona dotikata in sta tudi razlicno obarvana je zelo grdo videti ce so piksli enega v drugem zato se raje drzimo nacela da obarvamo piksle ki so le strogo znotraj poligona sl b slika sivi piksli so obmocje znotraj poligona crni pa na njegovem robu a robni piksli so postavljeni z algoritmom srednje tocke b robni piksli so postavljeni izkljucno znotraj poligona zapolnjevanje likov z vzorci slika risanje vzorca a gore b ikona hise c bitna slika ikone hise d brisanje hise iz ozadja e vzorec opek f vzorec prenesemo v ikono hise in g risanje koncne scene v predhodnih poglavjih smo like zapolnjevali z isto barvo po celi povrsini v takem primeru moramo algoritmu dodati se nek nadzor kaksno vrednost bo piksel dobil za slike v tockovnem formatu pix map to pomeni da poberemo barvo iz ustrezne tabele ce risemo vzorce transparentno tedaj dopustimo writepixel za ospredje foreground ce je vrednost piksla in prepovemo writepixel za vrednost ce pa ozadje naj ne bi bilo transparentno tedaj in ustrezno izbirata ospredje in ozadje background polnjenje vzorca s skaniranjem algoritem je zasnovan na primerjavi povrsin vzorca in lika ki ga bomo zapolnili z drugimi besedami moramo ugotoviti kam moramo postaviti piksel vzorca v liku prvic zacnemo postavljati vzorec na vrh lika tako da je skrajni levi vrhnji piksel vzorca v prvi zgornji vrstici lika tocko pritrditve mora izbrati vselej programer sam in ni jasnih navodil kako to narediti drugic predpostavljamo da je celoten zas lon zapolnjen z vzorcem in da je lik v celoti zapolnjen z vzorci ki jih vidimo le tam kjer je vzorec prozoren sl debelina crt nacelno so crte ki jih delamo sestavljene iz enega piksla ce zelimo crto odebeliti tedaj si mislimo da cez njo potegnemo z debelim svincnikom ali peresom takoj se postavi nekaj vprasanj prvic kaksne oblike je pero na koncu okroglo ali pravokotno drugic ce je pero pravokotno kako je pravokotnik orientiran ali vedno stoji vodoravno ali je pod nekim koto m poznamo vec nacinov debeljenja a ponavljanje pikslov ponavljanje pikslov v stolpcu pride v postev ce je naklon med in ter v vrsticah za vse ostale vrednosti naklona zakljucek linije je vselej vertikalen ali horizontalen odvisno od naklona to vcasih ni lepo sl b isto metodo uporabljamo lahko tudi za kroge ce izhajamo iz oktanta zgoraj desno b risanje s pravokotnim peresom pomeni da pero potuje iznad piksla sl c je sicer podobna oni od prej vendar se loci po konceh algoritem lahko zasnujemo tako da pravokotnik ali kvadrat oziroma krog postavimo tako da je piksel na crti njegov center s pomikanjem vzorca izrisemo debelo crto generiranje teksta se kar nekaj postopkov je ki smo jih preskocili na primer lepljenje likov crt ali rezanje itd menimo da iz opisanih postopkov lahko vsak sam izbere svoj najboljsi in primeren nacin pomemben postopek v grafiki je tudi pisanje teksta poznamo dva nacina kako to naredimo prvic vsak znak dolocimo kot skupek lini j in krogov oziroma lokov in jih nato s skaniranjem prenesemo na zaslon drugic ta nacin je preprostejsi in temelji na nacelu da je vsak znak dolocen s pravokotnim majhnim bitnim poljem generiranje znaka torej ni nic drugega kot uporaba funkcije copypixel iz pomnilnika oblike znakov ali vrste pisav font cache v slikovni pomnilnik geometrijske transformacije v tem poglavju bomo opisali nekaj d in d geometricnih transformacij ki jih srecujemo v racunalniski grafiki kot so translacije spreminjanje velikosti skaliranje in rotacija veliko aplikacij je takih da uporablja navedne operacije skupaj z objekti ali vzorci imenovali jih bomo kar simboli ki jih zeli postavljati na sceno matematicno ozadje nekaj postopkov temelji na matematicnih operacijah nad vektorji ali matrikami le te so vektorji vsota vektorjev navadni skalarni produkt vektorjev matrike mnozenje matrik determinanta transponirana matrika inverzna matrika kako potekajo navedene operacije si bomo prebrali ali v prirocniku ali pa poiskali v zapiskih iz nizjih letnikov transformacija d a translacijo premik lahko v ravnini x y naredimo tako da k starim koordinatam pristejemo odmik x' y' za vsako tocko p x y ki jo zelimo premakniti za dx enot paralelno z osjo x in dy enot paralelno z osjo y v novo tocko p x' y' to pomeni x' x dx y' y dy ce to zapisemo z vektorji stolpci x x' dx p p' in t y y' dy lahko pa kot p' p t translacijo naredimo tako da za vsako tocko izracunamo p' po omenjeni enacbi ker je linija sestavljena iz velikega stevila tock bi to pomenilo veliko izracunavanja zato raje dolocimo koncni tocki in potlej potegnemo linijo med njima sl a b slika premik translacija hise a pred premikom b po premiku b isto nacelo uporabimo tudi za kroge ali spreminjanje velikosti raztezanje tocke raztegnemo ali skrcimo za sx po osi x oziroma za sy po osi y tako da uporabimo mnozenje x' sx x y' sy y v matricni obliki bi to zapisali kot x' sx x y' sy y ali p' s p slika raztezanje oziroma krcenje skaliranje hise operacija ni uniformna hisa menja tudi polozaj a pr ed raztezanjem b po raztezanju na sl je na primer hisa zmanjsana za po x in po y koordinatah vedimo se nekaj hisa je manjsa in blize izhodiscni tocki ce bi bil kolicnik povecave tedaj bi hisa bila vecja in vstran od izhodisca raztezanje je lahko diferencno oziroma razlicno ce je sx ¹ sy ali uniformno oziroma proporcionalno ce sta sx in sy enaka torej sx sy c vrtenje zasuk ali rotacija za nek kot q je matematicno definirano kot x' x cos q y cos q y' x sin q y sin q z matrikami to zapisemo tako x' cos q sin q x y' sin q cos q y ali krajse p' r p kjer je r matrika funkcij sin in cos sl kaze zasuk za ° iz izhodiscne tocke a b slika zasuk hise hisa tudi menja polozaj a pred zasukom rotacijo b po zasuku prvotni kot se vedno meri proti smeri vrtenja urinega kazalca od x proti y ce merimo v smeri urinega kazalca tedaj moramo upostevati cos q cos q in sin q sin q glej sl a homogene koordinate in matricna predstavitev vse tri omenjene operacije lahko zapisemo kot p' t p translacija pomik p' s p skaliranje raztezanje p' r p rotacija zasuk premik se obravnava drugace kot ostali dve operaciji zelimo pa da bi bile vse operacije skladne zato tocke izrazimo v homogenih koordinatah v tem primeru se vse operacije izvedejo le z mnozenjem matrik homogene koordinate dobimo tako da k paru x y pristejemo se tretjo koordinato x y w istocasno tudi recemo da niz homogenih koordinat x y w in x' y' w' predstavlja isto tocko ce in samo ce je ena trojka mnogokratnik druge torej in pomeni isto tocko ceprav je ponazorjena z razlicnimi koordinatnimi trojkami to pomeni da je vsaka tocka predstavljena z vec homogenimi koordinatami vsaj ena od koordinat mora biti razlicna od torej ni dovoljena kombinacija ce je w razlicen od lahko trojko x y w delimo z w torej x w y w ce je w¹ lahko deljenje izvedemo in x w ter y w imenujemo kartezijske koordinate homogene tocke tocke pri w imenujemo tocke v neskoncnosti in jih ne bomo pogosto uporabljali trojka obicajno pomeni tocko v sistemu s tremi koordinatami d v nasem primeru pa nam pomeni tocko v dvo koordinatnem d sistemu ce vzamemo vse trojke tx ty tw t¹ ki pomenijo isto tocko dobimo premico linijo v d prostoru vsaka homogena tocka torej predstavlja premico v d prostoru ce torej tocko homogeniziramo delimo z w dobimo tocko x y torej homogeno tocko na ravnini w in v x y w prostoru sl b kaze to zvezo a b slika a izracun koordinat za zasuk b prostor homogenih koordinat xyw kjer je narisana ravnina w in projekcija tocke p x y w na le to ravnino ker so tocke sedaj vektorji s tremi elementi mora biti matrika s katero bomo mnozili tocko velikosti za premik torej velja x' dx x y' dy y v literaturi se cesto uporablja spremenjena oblika ki vsebuje transponirano matriko ki jo mnozimo z matriko ce za translacijo velja da tocko p premaknemo s transformacijo t dx dy v p' in potem p' premaknemo s t dx dy v p'' preprosto z mnozenjem matrik t torej p'' t dx dy t dx dy p t t p podobno lahko sklepamo se za raztezanje x' sx x y' sy y torej p' s sx sy p za katero velja tudi verizno nacelo operacij prav tako kot za rotacijo x' cos q sin q x y' sin q cos q y torej p' r q p matrika ima dolocene lastnosti uporabna je na primer transformacija razvlecenja to je takrat ko ima matrika obliko a in b po osi x po osi y v matriki sta vrednosti a in b konstanti razvlecenja opazimo da nam produkt shx t da t kar nam jasno pokaze da je razvlecenje v smeri x odvisno od y kompozicija d transformacij ideja ki smo jo pravkar opisali je uporabna pri osnovnih r s in t transformacijah na primer ce zelimo objekt rotirati tedaj bi objekt pomaknili iz izhodiscne tocke p v izhodisce zavrteli in ga pomaknili nazaj v p z matrikami to zapisemo na sledec nacin t x y r q t x y x cos q sin q x y sin q cos q y cos q sin q x cos q y sin q sin q cos q y cos q x sin q podoben pristop lahko uporabimo tudi za krcenje in raztezanje ali rotacijo in raztezanje ki ju prav tako kombiniramo med seboj koordinatni sistemi realnega sveta nekateri programski paketi za grafiko omogocajo izrazanje koordinat realnega zunajega sveta t j v m cm mm ipd zaradi tega moramo graficnim subrutinam povedati kako naj preslikajo koordinate sveta v koordinate zaslona a b c d slika pregled postopkov ki so potrebni da prevedemo koordinate zunajega sveta v koordinate zaslona a okno v koordinatah zunajega sveta okno opazovanja b le to okno premaknemo v izhodisce c isto okno raztegnemo na velikost okna prikazovanja in d okno premaknemo v koncni polozaj prikazovanja na zaslonu ce si torej mislimo primer s sl kjer imamo okno v koordinatah zunanjega sveta in okno na zaslonu kaksna je torej preslikava med njima taksno matriko si lahko zamislimo kot transformacijo v sledecih korakih okno najprej definiramo z njegovimi koordinatami spodaj levo in zgoraj desno tako okno prestavimo v izhodisce koordinatnega zunanjega sveta velikost okna priredimo velikosti oknu prikazovanja s pomocjo transformacije okno prikazovanja prestavimo na ustrezno mesto na zaslonu matriko mwv window to viewport preslikava okna opazovanja v okno prikazovanja ki izvede omenjeno preslikavo dobimo na sledec nacin mwv t umin vmin s umax umin xmax xmin vmax vmin ymax ymin t xmin ymin ce zgornjo matriko zmnozimo in rezultat mnozimo se z t tedaj dobimo koncno formulo za izracun koordinat za zaslon p x xmin vmax vmin xmax xmin vmin y ymin vmax vmin ymax ymin vmin matricna predstavi tev d transformacij spoznali smo da za predstavitev v d rabimo matriko torej bomo za d predstavitev potrebovali matriko za prikaz tocke s homogenimi koordinatami tudi tu velja da cetvorcka ne sme biti homogenost tudi tu pomen i delitev z w¹ torej x w y w z w vsaka tocka v tridimenzionalnem prostoru je predstavljena kot premica skozi izhodisce v dimenzionalnem prostoru koordinatni sistem je desno orientiran ponazorimo ga s tremi prsti desne roke ce upostevamo matematicna pravila vcasih je bolj primeren levo orientiran koordinatni sistem se posebno ce delamo z zaslonom translacijo v d lahko zapisemo kot t dx dy dz dx dy dz raztezanje v d zapisemo kot s sx sy sz sx sy sz rotacija d je rotacija v d okrog osi z torej rz q cos q sin q cos q hitro se prepricamo da je to res ce upostevamo kot ° in rotiramo tocko t iz enotine osi x pridemo na enotino os y rotacijo okrog osi x zapisem kot rx q cos q sin q sin q cos q rotacijo okrog osi y pa kot ry q cos q sin q sin q cos q vrstice in stolpci zgornjega levega dela podmatrike rz q rx q in ry q somed eboj pravokotni enotini vektorji in podmatrika ima determinanto enako kar pomeni da so matrike prostorsko ortogonalne zgornji levi del podmatrike po vec rotacijah je se vedno ortogonalen t j ohrani kote in razdalje vse te trasnformacije imajo tudi svoje inverzne transformacije dobimo inverzno transformacijo t z negacijo dx dy in dz transformacijo za s dobimo ce zamenjamo sx sy in sz z reciprocnimi vrednostmi inverzno obliko matrike za rotiranje dobimo ce negiramo kot rotacije inverzno obliko vsake ortogonalne matrike b je b b t transponirana matrika transponirana matrika ne zahteva zamenjavo elementov med seboj potrebno je le da zamenjamo indekse vrstic in stolpcev medtem ko racunamo vedimo da je ta metoda iskanja inverzne oblike skladna oni ko smo negirali kote q da smo dobili inverzne oblike rx ry rz vsako stevilcno matriko rotacij raztezanja ali translacij se med seboj lahko mnozi rezultat ima vedno obliko m r r r tx r r r ty r r r tz tako kot v primeru d je tudi tukaj podmatrika zgoraj levo doloca ustrezno rotacijo in raztezanje medtem ko t da premik pridobimo nekaj na racunanju ce eksplicitno izracunamo translacijo z izrazom x' x y' r y t z' z kjer sta r in t podmatriki matrike m tako kot smo pri dvokoordinatnem sistemu vpeljali transformacijo potega angl shear jo lahko tudi tu definiramo s sh shx shy shx shy ce uporabimo shxy nad tocko t tedaj dobimo poteg v ravnini vzporedni z osjo z t poteg v smeri vzporedno z ravninama x in y ima podobno obliko kot vidimo smo se omejili na transformacije posamezne tocke lahko pa transformiramo linije ki so definirane z dvema tockama tako da transformiramo samo koncne tocke ravnine so definirane z najmanj tremi tockami in jih lahko obravnavamo podobno obicajno pa so podane z enacbo ravnine in koeficienti ravnine se transformirajo razlicno bodi ravnina n definirana s stolpicnim vektorjem n t ravnina je torej dolocena z enacbo n p kjer je simbol za vektorski skalarni produkt in p t ta produkt nam da enacbo premice oblike a x b y c z d ki je lahko zapisan tudi s stolpicnim vektorjem torej n t p predpostavimo da transformiramo vse tocke na ravnini p z neko matriko m ce zelimo obdrzati n t p za transformirane tocke tedaj m oramo matriko n transformirati z neko matriko q tako da q n t m p ta izraz lahko prepisemo v n t q t m p ce upostevamo enakost q n t n t q t enacba bo drzala ce bo q t m veckratnik enotine matrike ce je mnozenec nas izraz pripelje do q t m oziroma q m t torej je stolpicni vektor koeficientov n' za ravnino ki smo je trasformirali z m n' m t n matriko m t ni potrebno da obstaja saj je lahko determinanta matrike ta slucaj se zgodi ce m vsebuje projekcijo ce na se normala ravnine trasformira ce zelimo senciti in ce m vsebuje samo translacijo rotacijo in uniformno enakomerno raztezanje tedaj je matrika se enostavnejsa n' se lahko poenostavi v t kjer je komponenta w in homogena tocka pomeni tocko v neskoncnosti in jo lahko obravnavamo kot smerni vektor