You are on page 1of 33

Univerza v Ljubljani Fakulteta za arhitekturo

Seminarska naloga

Orodje za pomo pri risanju c opisno-geometrijskih risb v programu AutoCAD


Avtor: Zoran kenda Mentorja: Dr. Alojz Muhic Dr. Domen Kuar s

5. oktober 2010

Kazalo
1 Povzetek 1.1 Cilji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Uvod 2.1 Risanje opisno geometrijskih risb - dilema 2.1.1 Primerjava obeh metod risanja . . 2.1.2 Program AutoCad . . . . . . . . . 2.2 Motivi . . . . . . . . . . . . . . . . . . . . 2.3 Implementacija . . . . . . . . . . . . . . . 2.4 Razlog za nastanek naloge . . . . . . . . . 2.5 Sistem po katerem sem pisal . . . . . . . . 4 4 5 5 5 6 7 8 8 8 10 10 11 11 12 12 13 14 14 15 15 15 16 18 18 19 20 21 21 22 23 23 24 25

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

3 Algoritmi/metode 3.1 Razdelitev problemov po nivojih . . . . . . . . . . . . . . . . . . 3.2 Nivo 1: Osnovne metode . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Preseie dveh premic (T = int(A1 , A2 , B1 , B2 )) . . . . . c sc 3.2.2 Pravokotna projekcija toke na rto (P = pproj(a, T )) . c c 3.2.3 Vzporednica premici skozi toko (T1 = parto(a, T )) . . . c 3.2.4 Presek kroga in premice (T = intc(a, r)) . . . . . . . . . 3.2.5 Odmik od toke po premici (T = of f setOnLine(a, A, d)) c 3.2.6 Razpolovie rte (P = mid(A, B)) . . . . . . . . . . . . sc c 3.2.7 Razdalja med dvema tokama (r = dist(A, B)) . . . . . . c 3.2.8 Rytzova metoda . . . . . . . . . . . . . . . . . . . . . . . 3.2.9 Krog (krog(C, r) . . . . . . . . . . . . . . . . . . . . . . 3.2.10 Metode, namenjene vnosu podatkov . . . . . . . . . . . . 3.3 Nivo 2: Osnovne opisno geometrijske metode . . . . . . . . . . . 3.3.1 Risanje tok v mongeovi projekciji . . . . . . . . . . . . c 3.3.2 Senca toke v mongeovi projekciji (monSh(X, Y, Z) . . . c 3.3.3 Senca toke v aksonometrini projekciji (axSh(A , An ) . c c 3.3.4 Metode za pomo pri risanju . . . . . . . . . . . . . . . . c 3.3.5 Rezanje rte (bl(p, T ) . . . . . . . . . . . . . . . . . . . . c 3.3.6 Obrezovanje koncev rt (trl(p, d) . . . . . . . . . . . . . c 3.4 Nivo 3: Napredneje opisno geometrijske metode . . . . . . . . . s 3.4.1 Senenje linij v mongeovi projekciji . . . . . . . . . . . . c 3.4.2 Risanje tok v aksonometriji . . . . . . . . . . . . . . . . c 3.4.3 Senenje linij v aksonometriji . . . . . . . . . . . . . . . c

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

Kazalo 3.4.4 4 Zakljuek c 4.0.5 Senenje krivulj v aksonometriji (axShCurve(c , cn )) . . . . . . . c Razvoj naprej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 29 29

5 Dodatek 30 5.1 Rytz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2 Primer programske kode . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6 Viri in literatura 33

1 Povzetek
Opisno geometrijske risbe se dandanes veinoma riejo na raunalnik. Najprimerneje c s c s in najpogosteje uporabljano orodje je raunalniki program AutoCad. Obstaja nekaj s c s alternativ, vendar so za resno delo preve toge. AutoCad sam po sebi ne omogoa c c opisno geometrijskih postopkov, ampak nudi osnovo (kot bi imel prazen list papirja in svinnik). Ker je delo z njim na tem podroju okorno in poasno, sem razvil c c c modul (dodatek, raziritev) za AutoCad, ki bistveno olaja risanje opisno s s geometrijskih risb. V seminarski nalogi sem opisal, prevedel v matematini jezik in dokumentiral algoc ritme in ukaze, ki sem jih razvil. Tako bi teoretino lahko izraunali reitve opisno c c s geometrijskih nalog, e bi uporabili te algoritme. c Hkrati slui ta seminarska tudi kot dokumentacija modula. z

1.1 Cilji
Olajati delo vsem, ki uporabljajo raunalnik za risanje opisno-geometrijskih risb, s c predvsem tudentom s Vzpodbujati uporabo znanja, pridobljenega pri predmetu, na drugih podrojih. c Omogoiti brezplaen dostop do orodja c c

2 Uvod
V uvodu bom razpravljal o tem, kakni so bili moji motivi, da sem se lotil tega projekta, s primerjal razline metode risanja in opisal raunalniki program AutoCad. Ce vas to ne c c s zanima, ali to e veste prosim preskoite na naslednje poglavje. z c

2.1 Risanje opisno geometrijskih risb - dilema


V navodilih za programe sem prebral, da lahko riemo na rokeali na raunalnik, vendar s c ali vse na roke ali vse na raunalnik. Dobro sem vedel, da nobena od teh dveh monosti ni c z preprosta. Risanje na raunalnik nam lahko risanje bistveno olaja, hkrati pa nastanejo c s novi, specini problemi, ki jih na roke nikoli ne bi imeli, kar lahko popolnoma zaseni c c vse prednosti.

2.1.1 Primerjava obeh metod risanja


Obe metodi sta preizkueni in priznani, kako se bom torej odloil? Do reitve sem si s c s pomagal s tem, da sem natel prednosti in slabosti obeh metod. s Risanje na raunalnik c Prednosti:
Risbo se lahko spreminja in popravlja Natannost - takoj se vidi, ali je res vse narisano kot je treba c Organizacija risbe po plasteh - monost skrivanja plasti z Risbo se natisne, debeline, tipe rt lahko kar izberemo c

Slabosti:
Poasno risanje c Veliko stvari je potrebno narediti rono, npr. krogce za toke in rono obrezovati c c c vse rte c V risbah se hitro zgubimo, e jih nimamo pravilno organiziranih c AutoCad ni prilagojen risanju opisno-geometrijskih risb

2 Uvod
Veino asa se ukvarjamo s tehninimi stvarmi, ki same po sebi ne doprinesejo c c c niesar k reitvi naloge c s Monost izgube podatkov, e posebej pri neveih uporabnikih z s sc

Risanje na roko Prednosti:


Celo risbo vidimo naenkrat Hitrost risanja z svinnikom in barvicami c Hitrost risanja nekaterih osnovnih operacij z ravnilom in estilom: vzpos rednic, pravokotnic, prenaanje razdalj.. s

Slabosti:
Ko stuiramo, napak ne moremo ve popraviti s c Pri tuiranju je potrebno biti natanen in zbran s c Teavno pisanje z ablonami z s Teavno risanje tok (prazen krogec) z c Hitro lahko nastane zmenjava (pri zapletenejih risbah) s s

moja odloitev Sam sem izbral raunalnik. Zakaj? Ker vem, da risbo spreminjam in c c popravljam, ne da bi mi bilo treba risati od zaetka. c

2.1.2 Program AutoCad


AutoCad je en izmed prvih CAD programov (od leta 1982). CAD je kratica za Computer Aided Design, kar pomeni oblikovanje s pomojo raunalnika. AutoCad je standard c c v svetu arhitektov, strojnikov, elektroinenirjev, krajinskih arhitektov, itd.. To je predz vsem zato, ker omogoa risanje natannih risb. Nekateri mu pravijo tudi elektronski c c rotring. Ker zadovoljuje tako irok spekter potreb, moramo razumeti, da lahko v AutoCadu s delamo z osnovnimi geometrijskimi elementi in z njih sestavljamo kompleksneje. Da bi s nam olajali delo, so v podjetju Autodesk (razvijalci AutoCada) pripravili posebne mos dule, ki olajajo risanje specinih nalog. Taka modula sta npr. AutoCad Architecture s c (za arhitekte), AutoCAD Mechanical (za strojnike).

2 Uvod

Slika 2.1: Tako izgleda program AutoCad

2.2 Motivi
Ko sem izbral metodo in program, sem se takoj lotil risanja prvega programa. Imel sem ga e reenega v svinniku, zato sem si mislil, da do to prerisati maji kaelj, kvejemu z s c c s c kakna ura dela. Pa sem se utel. Za prvi program sem potreboval skoraj 6 ur. To je s s priblino 12x ve asa, kot sem potreboval, da sem program reil v svinniku. z cc s c Veino asa pri risanju na raunalnik izgubimo s tehninimi problemi, ki c c c c niesar ne prispevajo k reevanju zadane naloge. Analogija v analognem svetubi c s bila, da bi ve asa istili rotringe, kot risali. cc c Z risanjem programov sem nadaljeval in se muil z okornimi orodji, ki so mi bila c na voljo v AutoCadu. Med tem sem premiljeval o tem, kako bi si sam lahko raziril s s AutoCad z dodatnimi ukazi, kar bi mi prihranilo delo in mi omogoilo, da se ukvarjam z c bistvom ne pa izgubljam as po nepotrebnem. Odloitev je bila tvegana: e se odloim c c c c in zanem razvijati modul, lahko izgubim toliko asa, da bi prej izrisal vse programe na c c roko in na raunalnik skupaj. Sam namre nisem vedel ni o tem, kaj se v AutoCadu c c c da programirati in kaj ne. Po nekaj izrisanih programih sem se odloil in zael z delom. c c

2 Uvod

2.3 Implementacija
Najprej sem poiskal vso dokumentacijo o tem, kako AutoCad sploh deluje in preuil c monosti raziritev. Monost je obstajala, v dokumentaciji sem nael nekaj primerov, ki z s z s sem jih preuil na njihovi podlagi postavil osnovo. c Tehninih teav je bilo mnogo, posebno teko je bilo v zaetku, ko se je pokazalo kako c z z c obutljiv je v resnici AutoCad na programerske napake. Najmanja nepazljivost lahko c s povzroi, da nenadoma izgubimo delo, poleg tega pa e ne vemo, kaj se je zgodilo in kje c s je napaka. Najprej sem matematino reil nekaj nalog na list papirja, ter s tega razvil nekaj c s osnovnih ukazov, ki sem jih kombiniral nato v zapleteneje. Naredil sem si orodja, ki s sem jih pri delu v tistem trenutku najbolj potreboval. Ko sem nato risal programe, sem hkrati testiral in uporabljal kar sem naredil. Sistem se je gradil, kar sam od sebe.

2.4 Razlog za nastanek naloge


Med razvojem sem, navduen nad uporabnostjo izdelka, to pokazal nekaj kolegom. Tudi s ti so bili navdueni in so tudi sami to hoteli imeti (tisti, ki e niso narisali programov). s s Se posebej, ko sem jim povedal e nekaj idej, ki sem jih imel, o tem, kaj vse bi lahko e s s naredil. Teava je bila v tem, ker nisem ve imel asa. Zato sem se po posvetu z g. Kuarjem z c c s odloil in napisal e to seminarsko kot dopolnilo in dokumentacijo k raunalnikem c s c s modulu. Dostop do modula Modul bo prosto dostopen na spletni strani http://opisna.info

2.5 Sistem po katerem sem pisal


Funkcije, metode in sintaksa Funkcija v matematinem smislu pomeni preslikavo f : A B. B je mnoica rezultatov c z funkcije f . V programskih jezikih obiajno z besedo funkcija poimenujemo podprogram ali mec todo, ki vrne vrednost. V tej seminarski bom uporabljal izraz metoda. Metodo si banalizirano lahko predstavljamo kot katlo, v katero lahko nekaj damo in nato iz nje s nekaj dobimo. Kar se v tej katli dogaja, bomo poimenovali algoritem (postopek do s cilja). Metode imajo imena, v tej seminarski so predstavljene v kurzivu npr P = mid(A, B). Z metodo mid (str. 14) npr. najdemo razpolovie daljice med dvema tokama. Tako sc c reemo, da je P (x, y) razpolovie daljice med A(x1 , y1 ) in B(x2 , y2 ). Ker je AB = c sc (A, B), lahko reem tudi da velja P = mid(AB) = mid(A, B) = mid(x1 , y1 , x2 , y2 ). c

2 Uvod Vsi algoritmi so zapisani v notaciji, ki se ji ree psevdokoda. Z psevdokodo zapisujemo c algoritme in je sorodna raunalnikim jezikom, vendar ni raunalniki jezik. Implemenc s c s tacija je tako neodvisna od raunalnika. c

3 Algoritmi/metode
3.1 Razdelitev problemov po nivojih
Ce imamo problem (R), katerega reitev je kompleksna, si lahko pomagamo tako, da s problem prevedemo v niz podproblemov, ki jih znamo reiti. Vsak podproblem v nizu s je zato manj kompleksen kot glavni problem. Tako npr., lahko nariemo senco premice, e znamo narisati senco toke. Senco oglas c c tega telesa lahko nariemo tako, da nariemo senco vsakega roba. s s Pri razvoju projekta sem zato probleme razdelil v ve nivojev, kjer je nivo 1, e c c gledamo na reitev problema najbolj osnoven, nivo 3 pa najbolj kompleksen. s

Slika 3.1: R je problem, f,g,h so metode reevanja, N1-3 nivoji. Kompleksnost (in sposobs nost) sistema z dodajanjem nivojev in metod raste, kompleksnost posameznih metod pa ne.

10

3 Algoritmi/metode

3.2 Nivo 1: Osnovne metode


Preden sploh lahko zanemo, moramo reiti nekaj osnovnih problemov, da jih bomo c s kasneje lahko uporabljali pri reevanju zahtevnejih nalog. s s

3.2.1 Preseie dveh premic (T = int(A1 , A2 , B1 , B2 )) c sc


Prvi problem, na katerega sem naletel je, da avtocad nima ukaza za doloaje preseia c c sc dveh rt, e se ti tudi v realnosti (lineje daljica ne premica!) ne sekata. Ta funkcija je c c uporabljana v vseh metodah.

Slika 3.2: Premici a(A(x1 ,y 1), B(x2 , y2 )) in b(C(x3 , y3 ), D(x4 , y4 )) se sekata v T . Ukaz int 1. Izberemo dve rti c 2. izrie se toka preseka s c Algoritem T (x, y) = a(A(x1 ,y 1), B(x2 , y2 )) b(C(x3 , y3 ), D(x4 , y4 )) ud = (y4 y3 )(x2 x1 ) (x4 x3 )(y2 y1 ) ud = 0 vzporedni (x4 x3 )(y1 y3 ) (y4 y3 )(x1 x3 ) ua = ud x = x1 + ua(x2 x1 ) y = y1 + ua(y2 y1 )

11

3 Algoritmi/metode

3.2.2 Pravokotna projekcija toke na rto (P = pproj(a, T )) c c

Slika 3.3: Pravokotna projekcija toke T (xp , yp ) na a(A, B) je P (x, y) c Ukaz prj 1. Izberemo rto c 2. Izberemo toko c 3. izrie projekcija toke na rto s c c Algoritem T (x, y) a(A(x1 ,y 1), B(x2 , y2 )) (x2 x1 )2 + (y2 y1 )2 (x1 xp )(x2 x1 ) r = (y1 yp )(y1 y2 ) L2 x = x1 + r(x2 x1 ) y = y1 + r(y2 y1 ) L=

3.2.3 Vzporednica premici skozi toko (T1 = parto(a, T )) c

Slika 3.4: Vzporednica toke a(A(x1 ,y 1), B(x2 , y2 )) skozi T (x3 , x3 ). Iemo katerokoli c sc T1 (x, y) pri danem x.

12

3 Algoritmi/metode Algoritem b(T (x3 , y3 ), P (x, y)) x1 = x2 (y1 y2 ) k= (x1 x2 ) n = y3 kx3 x = x3 y = kx + n a(A(x1 , y1 ), B(x2 , y2 )) f (x) = kx + n

3.2.4 Presek kroga in premice (T = intc(a, r))

Slika 3.5: Ce je diskriminanta = r2 d2 D2 = 0, je premica tangenta, e je < 0 je c r mimobena, e je > 0 je sekanta z c Algoritem d x = x2 x1 dy = y 2 y 1 dr = d2 + d2 x y Ddx pzn(dy )dx d2 r r2 d2 D2 r

D = x1 y1 x2 y1 x= y=

Ddx |dy |) r2 d2 D2 r d2 r 1; x > 0 1; x > 0

pzn(x) =

13

3 Algoritmi/metode Opomba Zaradi preglednosti navajam algoritem za presek kroga, ki ima sredie v sc je sredie kroga drugje, lahko koordinatno izhodie prekoordinatnem izhodiu. Ce sc sc sc maknemo v sredie kroga npr: x10 = x1 xs in nato nazaj xr = x + xs . sc

3.2.5 Odmik od toke po premici (T = of f setOnLine(a, A, d)) c

Slika 3.6: T (x, y) v oddaljenosti d od A na a(A(x1 ,y 1), B(x2 , y2 )) Algoritem T (x, y) a(A(x1 ,y 1), B(x2 , y2 )) f (x) = kx + n (y1 y2 ) imamo ka = (x1 x2 ) kot = arctan(ka ) y = sin(angle)d + y1 x = cos(angle)d + x1

3.2.6 Razpolovie rte (P = mid(A, B)) sc c


To metodo navajam samo kot referenco, saj ima AutoCad ta ukaz e vgrajen, vendar ga z bomo vseeno potrebovali pri naih algoritmih. s

Slika 3.7: Razpolovie a(A, B) je M sc Algoritem A = (x1 , y1 ), B = (x2 , y2 ) x1 + x2 y1 + y2 P = , 2 2

14

3 Algoritmi/metode

3.2.7 Razdalja med dvema tokama (r = dist(A, B)) c


To metodo navajam samo kot referenco, saj sodi v osnovnoolsko izobrazbo. s Algoritem d= (x2 x1 )2 + (y2 y1 )2

3.2.8 Rytzova metoda


Da bi lahko izrisali elipso v AutoCadu moramo najprej poznati obe osi. Pri risanju pa osi dobimo le redko, bolj pogosto imamo podana dva konjugirana polmera (kjer so tangente na elipso skozi krajia polmerov pravokotne). To je bila prva metoda, ki sem sc jo razvil, saj sem jo najve rabil. Za vsako elipso risati Ryza je namre kar asovno c c c potratno. Z uporabo tega ukaza se nam izrie elipsa in obe osi, e kliknemo 3 toke na konjugis c c ranih polmerih.

Slika 3.8: T1 A in B so tri krajia konjugiranih polmerov, os1 in os2 sta osi elipse sc Ukaz rytz 1. Izberemo eno od kraji na konjugiranem polmeru 1 sc 2. Izberemo 1. krajie na konjugiranem polmeru 2 sc 3. Izberemo 2. krajie na konjugiranem polmeru 2 sc 4. Izrie se nam elipsa in obe osi s Algoritem Ker je bil algoritem predolg, ga v celoti navajam na str.30

3.2.9 Krog (krog(C, r)


Kot referenco dodajam e formulo po kateri lahko izraunamo toko na krogu. s c c

15

3 Algoritmi/metode

Slika 3.9: Krog s srediem C je razdeljen na 10 delov sc Algoritem = 2i/stOdsekov x = xc + cos()r y = yc + sin()r

C(xc , yc ) je sredie kroga, r je polmer, i je t. toke, stOdsekov je tevilo tok na krogu sc s c s c

3.2.10 Metode, namenjene vnosu podatkov


Da bi se lahko izognili ponavljajoemu vnaanju nekaterih podatkov sem izdelal e nekaj c s s metod, ki vnesene podatke samo shranijo za kasnejo uporabo. Te metode navajam samo s kot referenco. Nastavitev mongeovega sistema Zanimajo nas osnovnica, izhodie in razmerje enot (npr E=1.5 pomeni 1e = 1.5AutoCadenot). sc Ukaz se samodejno poene, e hoemo uporabiti katero metodo, ki zahteva dane podatke. z c c vmes spremenimo pozicijo osnovnice, izhodia ali hoemo uporabljati drug sistem, Ce sc c moramo ukaz pognati rono. c Ukaz monSet 1. Izberemo rto - osnovnico c 2. Izberemo toko - izhodie c sc 3. Vpiemo faktor enot s

16

3 Algoritmi/metode 4. Podatki se shranita za kasnejo uporabo s Nastavitev arkov v mongeovem sistemu z Zanimata nas naklon arka v tlorisu in narisu. Ukaz se samodejno poene, e hoemo z z c c vmes spremenimo naklon arkov uporabiti katero metodo, ki zahteva dane podatke. Ce z ali hoemo uporabljati druge arke, moramo ukaz pognati rono. c z c Ukaz monSetZarek 1. Izberemo arek v tlorisu z 2. Izberemo toko v narisu c 3. Podatka se shranita za kasnejo uporabo s Nastavitev aksonometrinega sistema c Zanimajo nas toke 0,1,2,3 in faktor enot (npr E=1.5 pomeni 1e = 1.5AutoCadenot). 0 c je izhodie, 1,2,3 so prebodi koordinatnih osi (x,y,z po vrsti) z risalno ravnino. sc Ukaz axSet 1. Izberemo izhodie sc 2. Izberemo toko 1 (prebod x osi z risalno ravnino) c 3. Izberemo toko 2 (prebod y osi z risalno ravnino) c 4. Izberemo toko 3 (prebod z osi z risalno ravnino) c 5. Vpiemo faktor enot s 6. Podatki se shranijo za kasnejo uporabo s Nastavitev arkov v aksonometrinem sistemu z c Zanimata nas naklon arka v tlorisu in projekciji. Ukaz se samodejno poene, e hoemo z z c c uporabiti katero metodo, ki zahteva dane podatke. Ce vmes spremenimo naklon arkov z ali hoemo uporabljati druge arke, moramo ukaz pognati rono. c z c Ukaz axSetZarek 1. Izberemo arek v tlorisu z 2. Izberemo toko v projekciji c 3. Podatka se shranita za kasnejo uporabo s

17

3 Algoritmi/metode

3.3 Nivo 2: Osnovne opisno geometrijske metode


Preden sploh lahko zanemo, moramo reiti nekaj osnovnih problemov, da jih bomo c s kasneje lahko uporabljali pri reevanju zahtevnejih nalog. s s

3.3.1 Risanje tok v mongeovi projekciji c


Prvi problem pri risanju se pojavi e, ko moramo narisati toko. Iz koordinat x, y, z moz c ramo dobiti dva para tok na 2D risalni ravnini. Ker se koordinatni sistem v AutoCadu c ne ujema z sistemom v mongeu, je treba toko na koncu e premakniti glede na toko c s c T0 , ki je izhodie mongeovega sistema. sc

Slika 3.10: Toke A(1, 2, 3), B(3, 3, 2), C(5, 1, 5), D(6, 2, 2) c Ukaz monAddPoints 1. Ce parametri mongeovega sistema niso vneeni, se jih vnese s 2. Vpiem X koordinato toke s c 3. Vpiem Y koordinato toke s c 4. Vpiem Z koordinato toke s c 5. Vpiem oznako toke s c 6. Toka se izrie, postopek se zane od zaetka ali prekine (z ESC), e smo konali c s c c c c

18

3 Algoritmi/metode Algoritem 0(x0 , y0 , z0 ) izhodie sc T (x1 , y1 , z1 ) toka c T (x, y) = (x0 + x1 , y0 y1 ) T (x, y) = (x0 + x1 , y0 + z1 )

3.3.2 Senca toke v mongeovi projekciji (monSh(X, Y, Z) c


z Ce elimo risati sence v mongeovem sistemu, moramo najprej znati narisati senco toke c

Slika 3.11: Senca toke A, e sta arka z in z je AI I na 2 in AI na 1 c c z

19

3 Algoritmi/metode Algoritem o - osnovnica za1 = parT o(z , A) - arek skozi A vzporeden z,z z za2 = parT o(z , A) - arek skozi A vzporeden z z z B1 = int(za1 , o) - preseie z osnovnico c sc B2 = int(za2 , o) - preseie z osnovnico c sc B11 = parT o(y, B1 )- vertikalna rta, vzporedna osi y skozi B1 c B21 = parT o(y, B2 )- vertikalna rta, vzporedna osi y skozi B2 c AI = int(za 1, p(B2 , B21 )) - senca na1 AII = int(za2 , p(B1 , B11 )) - senca na1

Algoritem je zaradi preglednosti skrajan, potrebno je e obrezatiprirednice in arke s s z skozi A (obreem z of f setOnLine). Ve o int preberite na str.11, parT o na str.12 in z c of f setOnLine na str. 14. Ukaz monSh 1. Ce parametri mongeovega sistema niso vneeni, se jih vnese s 2. Ce smeri arkov niso vneene, se jih vnese z s 3. Izberem toko v 1 c 4. Izberem toko v 2 c 5. Izrieta se senci AI in AII s

3.3.3 Senca toke v aksonometrini projekciji (axSh(A , An ) c c


z Ce elimo risati sence v aksonometrinem sistemu, moramo najprej znati narisati senco c toke. c

20

3 Algoritmi/metode

Slika 3.12: Senca toke A, e sta arka z in zn je As n c c z Algoritem o - osnovnica za1 = parT o(z , A ) - zarek skozi A vzporeden z,z za2 = parT o(zn , An ) - arek skozi A vzporeden z zn z Asn = int(za1 , za2 ) - senca A Algoritem je zaradi preglednosti skrajan, potrebno je e obrezatiprirednice in arke s s z skozi A (obreem z trl). z Ukaz axSh 1. Ce smeri arkov niso vneene, se jih vnese z s 2. Izberem toko v tlorisu c 3. Izberem toko v projekciji c 4. Izrie se senca An s

3.3.4 Metode za pomo pri risanju c 3.3.5 Rezanje rte (bl(p, T ) c


Metoda prelomi rto tako, da namesto izbrane linije AB narie rti AT in BT . Ukaz sem c s c dodal zato, ker je AutoCadov ukaz break(br) neprimeren in prezamuden za lomljenje

21

3 Algoritmi/metode rt. Ta ukaz pride do uporabe ko moramo npr. pol rte narediti pikaste. c c c Algoritem p(A, B) - linija p1 = (A, T ) in p2 = (T, B) sta novi liniji

Ukaz bl 1. Izberem linijo 2. Izberem toko na liniji c 3. Linija se prelomi v toki c

3.3.6 Obrezovanje koncev rt (trl(p, d) c


Metoda na mestu linije p = (A, B) narie dve rti (skozi A in B) doline d tako, da sta A s c z in B e vedno krajii te navidezne rte. Tak ukaz zelo pride prav pri risanju prirednic, s sc c ordinal...

Slika 3.13: Ta ukaz pride zelo prav pri obrezovanju prirednic, ordinal... Algoritem A1 = of f setOnLine(p, A, d)) - toka na p za d oddaljena od A c B1 = of f setOnLine(p, B, d)) - toka na p za d oddaljena od B c p1 = (A, A1 ) in p2 = (A, A2 ) sta novi liniji

Ukaz trl 1. Vpiem distanco d s 2. Izberem linijo

22

3 Algoritmi/metode

3.4 Nivo 3: Napredneje opisno geometrijske metode s


3.4.1 Senenje linij v mongeovi projekciji c
Metoda je logino nadaljevanje Senca toke v mongeovi projekciji(str.19). Pozor, ker c c so vasih rte v tlorisu in narisu razlino dolge (npr. sence dveh premic), c c c senim tisto dolino rte, ki je denirana v tlorisu. c z c

Slika 3.14: Sence trikotnika ABC na tlorisno in narisno ravnino Ukaz monShLine 1. Ce parametri mongeovega sistema niso vneeni, se jih vnese s 2. Ce smeri arkov niso vneene, se jih vnese z s 3. Izberem rto v tlorisni ravnini c 4. Izberem rto v narisni ravnini c 5. Izrieta se senci rte v tlorisu in narisu s c

23

3 Algoritmi/metode Algoritem b = (A, B) A1 (x11 , y11 ) = pproj(b , A ) projekcija A B1 (x21 , y21 ) = pproj(b , B ) projekcija B Asenca = monSh(x1 , y1 , y11 ) izriem senco s Bsenca = monSh(x2 , y2 , y21 ) izriem senco s A (x1 , y1 ) in B (x2 , y2 ) sta krajii b sc na b na b A B

A1 in B1 potrebujem, ker se vasih dolina rt v tlorisu in narisu ne skladata popolc z c noma.

3.4.2 Risanje tok v aksonometriji c

Slika 3.15: Aksonometrini sistem (7:5:6 po Weissbachu) s tokami A(1,1,1), B(5,-3,4), c c C(3,3,5) Ukaz axAddPoints 1. Ce parametri aksonometrinega sistema niso vneeni, se jih vnese (axSet) c s 2. Vpiem X koordinato toke s c 3. Vpiem Y koordinato toke s c 4. Vpiem Z koordinato toke s c 5. Vpiem oznako toke s c 6. Toka se izrie, postopek se zane od zaetka ali prekine (z ESC), e smo konali c s c c c c

24

3 Algoritmi/metode Algoritem S = mid(1, 2) - sredie kroga sc dist(1, 2) - polmer kroga r= 2 c = krog(s, r) 00 = intc(c, parto(z, 0)) - zavrtimo 0 okoli 12 skrajevalna razmerja sestava x = cos(), y = cos(), x = cos() s dist(1, 0) x = dist(1, 00 ) dist(1, 0) y = dist(1, 00 ) z = 2 2 2 x y

Px = of f setOnLine(osx , xx f, 0) - projekcija na x os Py = of f setOnLine(osy , yy f, 0) - projekcija na y os Pxy = int(parto(osx , py ), parto(osy , px )) - iskana toka v xy c Pn = of f setOnLine(parto(z, Pxy ), zz f )) - iskana toka v projekciji c

3.4.3 Senenje linij v aksonometriji c


Metoda je nadaljevanje Senca toke v aksonometrini projekciji(str.20). Pozor, ker c c so vasih rte v tlorisu in projekciji razlino dolge (npr. sence dveh premic), c c c senim tisto dolino rte, ki je denirana v projekciji. c z c

25

3 Algoritmi/metode

Slika 3.16: Aksonometrini sistem (7:5:6 po Weissbachu) s trikotnikom a,b,c in njegovo c senco pri podanih arkih. Toke niso oznaene zaradi preglednosti. z c c Ukaz axShLine 1. Ce smeri arkov niso vneene, se jih vnese (axSetZarek) z s 2. Izberem linijo 3. Izrie se senca linije s Algoritem a = (A, B) A1 = pproj(an , An ) projekcija An na an B1 = pproj(an , Bn ) projekcija Bn na an Asenca = axSh(A1 , An ) senca A Bsenca = axSh(B1 , Bn ) senca B

asenca = (Asenca , Bsenca )

A1 in B1 potrebujem, ker se vasih dolina rt v tlorisu in projekciji ne skladata c z c popolnoma.

3.4.4 Senenje krivulj v aksonometriji (axShCurve(c , cn )) c


Metoda je nadaljevanje Senca toke v aksonometrini projekciji(str.20). Z tem ukazom c c lahko senimo kombinaciji: c

26

3 Algoritmi/metode Crte v ravnini tlorisni ravnini in krivulje v projekciji

Dveh zaprtih krivulj, od tega prva lei v ravnini z

Algoritem deluje tako, da z premico pi z seka obe krivulji in tako dobi dve toki c (projekcijo in tloris). Postopek ponavlja z n premicami in z e poznano metodo seni z c dobljene toke. Skozi sence tok nato narie krivuljo (spline). c c s Pozor, ker so vasih rte v tlorisu in projekciji razlino dolge (npr. tloris c c c krivulje lei na premici), senim tisto dolino krivulje, ki je denirana v z c z projekciji. V primeru, da senimo dve krivulji je potrebno podati e katera c s robova krivulj spadata skupaj. Metoda je testirana samo za nekaj tipov krivulj, tako da so rezultati e eksperimentalni, vendar lahko rezultate hitro s preverite, z ronim senenjem bistvenih tok. c c c

Slika 3.17: Aksonometrini sistem (7:5:6 po Weissbachu) s podatnimi arki. Senci elipse c z en in krivulje kn padata na tlorisno ravnino, senca elipse fn pa na ravnino en . Ukaz axShCurve 1. Ce smeri arkov niso vneene, se jih vnese (axSetZarek) z s 2. Izberem linijo ali krivuljo v ravnini vzporedni z tlorisno 3. Izberem krivuljo v projekciji 4. *Ce sem izbral dve krivulji izberem toko blizu roba krivulje v tlorisu c

27

3 Algoritmi/metode 5. *Izberem toko blizu roba krivulje v projekciji, ki spada k prej izbranemu robu c krivulje 6. Izrie se senca krivulje s Algoritem Za vsako toko Ni krivulje kn : c ni = parto(z, Ni ) - vzporednico osi z skozi Ni N1i = int(ni , kn ) - N1i je toka na krivulji kn c NSi = axSh(N1i , Ni ) senca Ni na

Postopek je namerno skrajan in zelo poenostavljen zaradi preglednosti. Seveda je pos trebno paziti, kateri robovi krivulj so skupaj in ali so doline skladne, krivulje zaprte... z

28

4 Zakljuek c
Prili smo do konca, vendar pa imam e vedno obutek, da sem e vedno nekje na sredi. s s c s Taka naloga se lahko nikoli ne kona. c Ko sedaj pogledam nazaj koliko asa sem porabil, vidim da so se moje slutnje urec sniile: z seminarsko sem porabil vsaj trikrat ve asa, kot bi z rednimi obveznostmi. c cc Vendar mi ni al, nasprotno, imam obutek, da sem naredil nekaj koristnega. z c Upam, da nisem prepisoval in poenostavljal algoritmov iz kode zaman. Lahko sluijo z samo kot dokumentacija, kaj sem v kodi poel ali pa kot gradivo za koga, ki bi kaj takega c potreboval. V tej seminarski se t tehninim vidikom implementacije nisem ukvarjal, e c c vas zanima ve prosim poglejte pod literaturo. c

4.0.5 Razvoj naprej


Ce bo za ta projekt dovolj zanimanja ga bom dopolnil e z nekaj uporabnimi funkcijami s npr: stranskimi risi, vrtenje, polaganje ravnin... Poleg tega je potrebno e popraviti s vmesnik, da bo e bolj uporabniku prijazen. Seveda je potrebno modul e pretestirati in s s do takrat pa svetujem previdnost (redno shranjevanje npr.) da ne bo koga pekla glava po nepotrebnem.

29

5 Dodatek
5.1 Rytz
Ker je bil algoritem predolg, ga navajam tukaj T (x1 , y2 ) je krajie na konjugiranem sc polmeru 1, A(x2 , y2 ) in B(x4 , y4 ) sta krajii konjugiranega polmera 2. Iemo os1 os2 sc sc ter center C. (x2 + x3 + y4 y2 ) 2 (x2 x3 + y2 + y4 ) yA = 2 (x2 + x3 + y2 y4 ) xB = 2 (x3 x2 + y2 + y4 ) yB = 2 (x2 + x3 ) xC = 2 (y2 + y4 ) yC = 2 x3 = x2 + x 3 x1 y3 = y2 + y4 y1 xA = vektorji ax = xA x1 ay = yA y1 bx = xB x1 by = yB y1 k= bx bx + by by ax ax + ay ay

ex = bx + k ax ey = by + k ay es = ex ex + ey ey xE = x1 + ex

30

5 Dodatek yE = y1 + ey ay (xC x1 ) ax (yC y1 ) t= (ax ex + ay ey) xM = xC ey t yM = yC + ex t

osi elipse xAM = xA xM yAM = yA yM x1 M = x1 xM y1 M = y1 yM sb = sa = xAM xAM + yAM yAM x1 M x1 M + y1 M y1 M 180 atan(ey, ex) fi = xP = xC sb ey/es yP = yC + sb ex/es xQ = xC + sb ey/es yQ = yC sb ex/es xR = xC + sa ex/es yR = yC + sa ey/es xS = xC sa ex/es yS = yC sa ey/es

reitev s

C(xC, yC) - center os1 (R(xR, yR), S(xS, yS))) - velika os os2 (P (xP, yP ), Q(xQ, QS))) - mala os

31

5 Dodatek

5.2 Primer programske kode


Iz kode je izrezanih nekaj preprostejih funkcij. Skupaj je kode e ve kot 2000 vrstic. s z c
// v r n e p r e s e c i s c e dveh c r t private Autodesk . AutoCAD . Geometry . Point3d L i n e I n t e r s e c t i o n ( L i n e l 1 , L i n e l 2 ) { return L i n e I n t e r s e c t i o n ( l 1 . S t a r t P o i n t , l 1 . EndPoint , l 2 . S t a r t P o i n t , l 2 . EndPoint ) ; } // v r n e p r e s e c i s c e dveh c r t private Point3d L i n e I n t e r s e c t i o n ( Point3d p1 , Point3d p2 , Point3d p3 , Point3d p4 ) { double ua , ub ; double i f ( ud { ua ub ud = ( ( p4 .Y p3 .Y) * ( p2 .X p1 .X) ( p4 .X p3 .X) * ( p2 .Y p1 .Y ) ) ; != 0 ) = ( ( p4 .X p3 .X) * ( p1 .Y p3 .Y) ( p4 .Y p3 .Y) * ( p1 .X p3 .X) ) / ud ; = ( ( p2 .X p1 .X) * ( p1 .Y p3 .Y) ( p2 .Y p1 .Y) * ( p1 .X p3 .X) ) / ud ;

double x = p1 .X + ua * ( p2 .X p1 .X ) ; double y = p1 .Y + ua * ( p2 .Y p1 .Y ) ; return new Autodesk . AutoCAD . Geometry . Point3d ( x , y , 0 ) ; } return p1 ; } public Point3d P r o j e c t i o n O f P o i n t ( Point3d p1 , Point3d p2 , Point3d p r j P t ) { double L = Math . S q r t ( Math . Pow( p2 .X p1 . X, 2 ) + Math . Pow( p2 .Y p1 . Y, 2 ) ) ; double L2 = Math . Pow( L , 2 ) ; double r = ( p1 .Y p r j P t .Y) * ( p1 .Y p2 .Y) ( p1 .X p r j P t .X) * ( p2 .X p1 .X) / L2 ; double Px = p1 .X + r * ( p2 .X p1 .X ) ; double Py = p1 .Y + r * ( p2 .Y p1 .Y ) ; return new Point3d ( Px , Py , 0 ) ; } // v r n e v z p o r e d n i c o c r t e ( p1 , p2 ) s k o z i t public L i n e P a r a l l e l T o ( Point3d p1 , Point3d p2 , Point3d t ) { double s l o p e = 0 ; i f ( p1 .X p2 .X != 0 ) { s l o p e = ( ( p1 .Y p2 .Y) / ( p1 .X p2 .X ) ) ; double n = t .Y s l o p e * t .X; v a r vx = 1 ; i f ( t .X == 1 ) vx = 2 ; v a r t 1 = new Point3d ( vx , s l o p e * vx + n , 0 ) ; return new L i n e ( t1 , t ) ; } else { return new L i n e (new Point3d ( t . X, t .Y + 1 , 0 ) , t ) ; } }

32

6 Viri in literatura
Oton Sajovic, Normalna Aksonometrija, Mladinska knjiga, Ljubljana 1962

Vilko Nie, Deskriptivna geometrija 1-2, Skolska knjiga, Zagreb 1987 c


Ivan Prebil, Opisna geometrija, Univerza v Ljubljani, Fakulteta za strojnitvo, s Ljubljana 2006 Milan Radin, Opisna geometrija 1-2, Mladinska knjiga, Ljubljana 1972 Kean Walmsley, Through the interface, dostopno na naslovu: http://through-theinterface.typepad.com Eric Weisstein, Circle-Line Intersection, MathWorld, Wolfram research, dostopno na naslovu: http://mathworld.wolfram.com/Circle-LineIntersection.html Joseph ORourke, Comp.Graphics.Algorithms Frequently Asked Questions, dostopno na naslovu: http://www.exaop.org/docs/cgafaq/cga1.html Wikipedia, dostopno na naslovu: http://en.wikipedia.org JRGX, Drawing an Ellipse Using Conjugate Diameters in Flash 5, dostopno na naslovu: http://jrgraphix.net/research
A Ta seminarska je bila napisana v jeziku L TEX(http://en.wikibooks.org/wiki/LaTeX) s pomojo programa Led (dostopno na naslovu: http://www.latexeditor.org/) avtorjev c Adama Skrczyskija in Sebastiana Deorowicza. o n

33