Zahteva za nalogo je naslednja: v programskem jeziku "JavaScript" je potrebno napisati računalniški program, ki bo na osnovi podane enačbe ploskve sposoben narisati oz. generirati množico točk in jih nato grafično predstaviti kot ploskev v prostoru. Program mora omogočati skaliranje (povečevanje in pomanjševanje), translacijo (premik) in rotacijo izrisanega grafa. Osnovni gradniki ploskve - črte- morajo biti izrisani s pomočjo "PHIGS" grafične knjižnice.
Program mora ob ukazu za izris ploskve glede na minimalno in maksimalno zalogo vrednosti funkcije izračunati takšen
skalirni faktor, da se ploskev vidi v celoti. Dobljeno ploskev nato lahko poljubno transformiramo z vgrajenimi geometrijskimi transformacijami.
Idejna rešitev seminarske naloge je prikazana na spodnji sliki.
Slika 1: Idejna rešitev seminarske naloge
Nazaj na kazalo
Analitične površine so posebna veja matematike, in sicer analitične geometrije, ki obravnava geometrijo
oz. geometrijska telesa z nekimi analitičnimi metodami. Njen začetnik je
bil Descartes. Kartezične koordinate točk na površini ustrezajo
določenim enačbam ali neenačbam, iz katerih lahko izvedemo nekatere izreke
o površini. V matematiki je poznanih nekaj značilnih površin, ki jih definirajo
enačbe s točno določeno strukturo. Tako si lahko že iz pogleda na tako
enačbo ustvarimo približno sliko o legi in izgledu ploskve v prostoru.
Površine v matematiki strokovno imenujemo ploskve drugega reda. Dejansko
le - te niso nič drugega kot zaloge vrednosti matematičnih funkcij dveh
spremenljivk, ki jih grafično prikazemo kot ploskve.
Osnovni princip generiranja analitične površine je prikazan na spodnji sliki:
Slika 2: Princip generiranja analitične površine
Pri tem predstavlja izraz f(x, y) prej omenjeno enačbo površine. To je nek "predpis", ki dvema točkama iz ravnine x - y, "priredi" novo točko (x, y, z), ki je za razdaljo z odmaknjena od x - y ravnine oz. definicijskega območja funkcije. Na ta način je dobljena vsaka točka na ploskvi, če pa postopek izvedemo za vsako točko ravnine x - y, s tem dobimo množico točk (x, y, z), ki nam definirajo ploskev.
Ploskve drugega reda delimo na prave in degenerirane (izrojene). Prave ploskve so: elipsoid, eliptični
paraboloid, hiperbolični paraboloid, ter enodelni in
dvodelni hiperboloid. Neprave ploskve so tiste, ki so izrojene v pare
ravnin ali pa točke. Vsega skupaj poznamo 5 pravih in 12 degeneriranih
ploskev drugega reda.
Nekaj najbolj značilnih tipov ploskev, ki so centrirane
v koordinatnem izhodišču, je skupaj z enačbami zbranih v spodnji tabeli.
Slika ploskve | Ime telesa | Enačba ploskve | |||
---|---|---|---|---|---|
Troosni elipsoid | |||||
Rotacijski hiperboloid | |||||
Eliptični paraboloid | |||||
Hiperbolični paraboloid | |||||
Stožec |
Geometrijske transformacije so matematične operacije, ki neko točko v prostoru preslikajo v novo točko. Povezava med staro in novo točko je izvedena s pomočjo 4×4 matrike, katere zgradba določa, kje nova (transformirana) točka leži. Tako poznamo tri glavne geometrijske transformacije - translacijo, rotacijo in skaliranje. Da lahko omenjene geometrijske transformacije obravnavamo na enak način in da jih med seboj lahko kombiniramo, uporabljamo homogene koordinate.
V kartezičnem koordinatnem sistemu je točka predstavljena s tremi koordinatami in sicer z (x, y, z).
Homogeni koordinatni sistem pa za opis točke v prostoru potrebuje štiri koordinate,
ki so (X, Y, Z, W). Povezava med kartezičnim in homogenim koordinatnim sistemom
je definirana takole: x = X / W, y = Y / W in z = Z / W. V računalniški
grafiki je konstanta W vedno enaka 1.
Z zapisom točk v homogenih koordinatah, se transformacijske
matrike zapišejo na način, ki je prikazan v spodnji tabeli:
|
|
|
|
|
|
|
|
|
|
Geometrijska transformacija se dejansko napiše z eno samo matrično enačbo: A2 = [M] × A1
, kjer je A1 začetna (stara) točka, A2
končna (transformirana) točka,
[M] pa ustrezna transformacijska
matrika, katere elementi so podani v zgornji tabeli.
Nazaj na kazalo
Računalniški program sem napisal v jeziku JavaScript. To je skriptni programski jezik, ki se uporablja za spletne predstavitve. Razvijati ga je začelo podjetje Netscape Communications, ki je želelo svoj spletni brskalnik Navigator opremiti z nekaj predmeti, ki bi bili na nek način "programljivi". Netscape je bil prvi izdelovalec, ki je vgradil podporo javanske kode v svoj spletni brskalnik.
JavaScript je nekaj povsem drugega kot Java. JavaScript je "programljiva" razširitev jezika HTML in kot tak ne omogoča izdelave samostojnih programov, ampak le nadzoru obstoječega programja in podatkov, kodiranih v HTML. Zato se uporablja za reševanje manj zapletenih problemov. Programska koda, napisana v JavaScriptu ima nadvse "lepo" lastnost: zelo enostavno jo je uporabiti. Ker ne potrebujemo posebnih urejevalnikov, prevajalnikov in izvajalnih okolij, jo lahko uporabljamo, preizkušamo in razvijamo povsem enako, kakor predstavitve HTML. To gre približno takole: napišemo nekaj kode, poženemo spletni brskalnik in si ogledamo rezultat. Njena bistvena prednost je hitro popravljanje in spreminjanje, kar pomeni, da se lahko programiranja učimo tudi po sistemu preizkusi - popravi.
V uvodnem oknu je hiperpovezava do glavnega okna programa, ki omogoča izris ploskve in spreminjanje vseh njenih glavnih parametrov, kot so npr. meje definicijskega območja, gostota mreže, ki definira ploskev, njena enačba ter velikost in položaj le-te v prostoru.
PHIGS - Programmer's Hierarchical Interactive Graphics System, je grafična knjižnica, ki vsebuje približno 400 funkcij, ki uporabniku omogočajo prikaz in manipulacijo z 2D in 3D objekti. To je mednarodni standard, ki ga je ustanovila mednarodna organizacija za standardizacijo - ISO. PHIGS vsebuje nabor sorodnih grafičnih objektov, ki jih strokovno imenujemo primitivi, vsakemu objektu pa pripadajo atributi, ki definirajo mesto, smer, barvo in prikaz le - tega. Ta princip bomo uporabili za končni izris našega grafa funkcije.
Zelo pomembno vlogo v programu imajo že opisane geometrijske transformacije, ki omogočajo uporabniku, da si ploskev ogleda iz vseh zornih kotov, jo skalira ali premika.
Programska koda je razdeljena na tri glavne module, in sicer:
Prvi korak je definiranje vseh parametrov, ki so potrebni za izračun in izris grafa. Omenjene
parametre vnese uporabnik v ustrezna vnosna polja. Ko kliknemo na gumb za izris grafa, program najprej izračuna
koordinate vseh točk na ploskvi, nato pa te koordinate najprej transformira v 2D, saj za izris potrebujemo samo
X in Y koordinati.
Izračunane točke nato še povežemo med seboj. Izris grafa poteka v dveh zaporednih fazah: najprej izrišemo črte,
ki so paralelne z Y osjo, nato pa še črte, paralelne z X osjo. Izrisan graf je transparentna mreža točk.
Najprej je program deloval izredno počasi, saj je nekajkrat izračunaval ene in iste točke. Nato sem kodo predelal, in sicer tako,
da se koordinate točk izračunajo samo enkrat, nato pa se jih enostavno uporabi za izris grafa, izpis minimalne in maksimalne koordinate Z ter
izris kvadra okoli grafa, ki je izrisan samo za boljšo prostorsko predstavo grafa. V kodi je dodanih še nekaj vrstic, ki definirajo izris obeh
koordinatnih sistemov ter izpis oznak ob oseh.
Nazaj na kazalo
Problem, ki sem ga obravnaval, je povsem matematične narave, zato upam, da bo program koristil kakšnemu matematičnemu navdušencu, žal pa je izrisan graf samo transparentna mreža točk, tako, da se nekatere ploskve ne vidi prav dobro, kar pa lahko rešimo z definiranjem gostejše mreže oz. bolj drobne delitve, to pa na žalost nekoliko podaljša čas izračuna točk in izris ploskve. Program je uporaben predvsem za vizualizacijo (prostorsko predstavitev) ploskve, ki je definirana z enačbo.
To je moj prvi resnejši računalniški program in lahko rečem, da sem se pri njegovi izdelavi veliko naučil. Prej nisem poznal ne HTML-ja in ne JavaScript-a, kar mi je na začetku povzročalo nemalo problemov.
Na koncu pa sem ugotovil, da programiranje v omenjenih jezikih sploh ni tako zelo težko, kot sem si na začetku predstavljal.
V ta program sem vložil ogromno truda in časa, mislim pa, da se mi bo to obrestovalo.
Za konec bi se rad zahvalil vsem sodelavcem laboratorija LECAD za strokovno pomoč, predvsem pa se zahvaljujem mojemu mentorju, ki je potrpežljivo odgovarjal na moja vprašanja!
Oglejmo si še dva podobna programa za izris grafa funkcije dveh spremenljivk, ki sem ju našel na internetu. Oba sta programirana v Javi, omogočata pa tudi izvajanje osnovnih geometrijskih transformacij.
Nazaj na kazalo
© by 1021