Eukleides

A Matek.hu wikiből

Tartalomjegyzék

Bevezetés

Az Eukleides egy geometriai leíró nyelv, melyet Christian Obrecht francia matematikatanár alkotott meg. Ő maga így ír róla a TUGboat c. folyóiratban:

„Egy franciaországi középiskola matematika tanáraként meglehetősen nagy számú dokumentumot kell létrehoznom tanítványaim számára, mely szöveget és képleteket is tartalmaz. … Egyik este egy háromszöget akartam rajzolni a beírt körével, ezért ki kellett számolnom külön a középpont koordinátáit, és a kör sugarát, ami eléggé unalmas. Számolás közben rájöttem, hogy azokat könnyen elvégezheti a számítógép is, és ez adta az ötletet, hogy létrehozzam az Eukleidest. Az volt a célom, hogy a lehető legjobban összehangoljam a matematika tanárok szavait a programkódokkal.

Például az előző probléma a gyakorlatban leírva:

Legyen ABC egy háromszög és K a beleírt kör. Rajzoljuk meg K-t.

Az Eukleidesben így néz ki:

A B C triangle
K = incircle(A,B,C)
draw(A,B,C) ; draw(K)

Ami a következő grafikus eredményt adja:"

Kép:Triangle.jpg

De miért is jó ez?

Az Eukleides egy olyan programnyelv, melynek elsajátításával könnyen, gyorsan és egyszerűen állíthatunk elő jó minőségű magyarázó ábrákat feladatokhoz, feladatgyűjteményekhez, könyvekhez.

Miért fontos ez?

Néhány szó a képalkotási módokról

Bizonyára sokan rajzoltak már Paintben vagy egyéb raszteres képszerkesztőben különböző geometriai alakzatokat akármilyen célból. Akik az elkészült képeket kinyomtatták, észrevehették, hogy a végeredmény ‒ különösen ha nagyították is ‒ nem túl szép, igényes. És itt jön a képbe az Eukleides, ami az ábrákat vektorgrafikus fájlba menti, amely sokkal jobb minőségű képet ad.

Miért is?

Ennek megértéséhez tisztában kell lennünk azzal, hogy mi az a raszteres és vektorgrafikus képalkotási mód.

Raszteres (pixelgrafikus, bittérképes) Vektorgrafikus
A kép minden képeleméhez (pixeléhez) egyesével rendeljük hozzá a színeket. Nagyításnál a kép "széteshet", minősége romlik. A képek felépítésére egyszerű geometriai alakzatokat használ.
Úgy képzelhetjük el, mint egy hatalmas koordináta rendszert (táblázatot), ahol minden egyes (x,y) párnak (cellának) saját értéke van. Természetesen minél több cellából épül fel, annál jobb lesz a kép minősége, de lehet úgy felnagyítani, hogy láthatóak legyenek az egyes cellák. Úgy képzelhetjük el, mint amikor mi magunk rajzoljuk meg az ábrát a koordináta rendszerben körző és vonalzó segítségével. Nem celláról cellára fogunk haladni, hanem pontok, távolságok, szögek stb. segítségével rajzoljuk meg a képet tetszőleges pontossággal.
Az ilyen fájlok leggyakoribb kiterjesztései: bmp, gif, jpg, jpeg, png, tif, tiff Az ilyen fájlok leggyakoribb kiterjesztései: dwg, emf, odg, (eps), ps, svg, svgz

Az Eukleides az elkészült ábrákat eps kiterjesztésű (Encapsulated PostScript) fájlba menti, mely alapvetően vektorgrafikus, de tartalmazhat beágyazott bittérképes képeket is. A PostScript (ps) az egyik legnépszerűbb vektoros képformátum, ami nem csak az ábrát magát, hanem nyomtatónak szóló utasításokat is tartalmaz. Az eps ennek egy speciális formája, mely exportálható, importálható, felbontásfüggetlen és különböző printereken nyomtatható. Jól használható kiadványszerkesztőkbe vagy illusztrációs rendszerekbe való importálásra. A nyomdák is előszeretettel alkalmazzák.

A vektoros képek programmal megtekinthetőek és utólag szerkeszthetőek is. Sokáig a legismertebb ilyen képszerkesztő a CorelDRAW volt, ám ez nem ingyenes és csak Windows platformon alkalmazható. Kimagaslóan alkalmas poszterek, logók tervezésére, többoldalas szórólapok, prospektusok létrehozásához, digitális fényképek feldolgozására, internetes oldalak és dokumentumok szerkesztésére, díszítésére, valamint vektoros animációkészítésre. Szinte minden olyan funkciót tartalmaz, ami a professzionális grafikák elkészítéséhez szükséges.

Néhány éve léteznek ingyenes megfelelői, például az Inkscape, amely fut Microsoft Windows, Mac OS X és Unix-szerű operációs rendszereken, jóllehet a fejlesztés elsődlegesen Linux alatt folyik. Egyszerűen kezelhető, magyar nyelvű vektorgrafikus szerkesztőprogram, mely számos formátumot ismer, köztük a következőket: svg, ps, eps, odg.

Egy másik ingyenes alternatíva a jól ismert OpenOffice termékcsalád tagja, az OpenOffice Draw. Alkalmazható az egyszerű skicctől a bonyolult tervekig; megadja a lehetőséget, hogy képek és diagramok segítségével kommunikáljunk.

Szintén kedvelt vektorgrafikus program a Dia, egy Linux, Unix és Windows alatt kiadott GPL licencű diagram készítő alkalmazás.

Néhány szó a Linuxról

Az Eukleides egy alapvetően Linux alapú program, de elérhető és kipróbálható webes felületen is Kovács Zoltán honlapján ide kattintva.

A Linux egy nyílt forráskódú, ingyenes operációs rendszer, nyilván már szinte mindenki hallott róla. Több változata van, melyet folyamatosan fejlesztenek. Egyik legelterjedtebb és talán legfelhasználóbarátabb az Ubuntu, melyet telepíthetünk jól megszokott operációs rendszerünk „alá” is, akár egy programot. Ehhez rengeteg leírást, útmutatót, fórumot, segítséget találhatunk az interneten itt.

Az Eukleides használata

Ha már feltelepítettük a Linuxunkat, nincs más dolgunk, mint a csomagkezelővel letölthető ingyenes szoftverek között megkeresni az Eukleidest, és installálni.

Ez elég egyszerű művelet, de telepítés után meglepődve tapasztalhatjuk, hogy nincs parancsikon az asztalon, amivel indíthatnánk a programot.

Ez azért van, mert az Eukleidesnek nincs grafikus kezelőfelülete (nem látjuk). Aki még nem találkozott ilyennel, annak elsőre furcsa, és szokatlan lesz, de a matematika és a Linux világában ez teljesen normális, bevált forma.

A legegyszerűbb talán, ha a kívánt ábra kódját egy egyszerű szöveges dokumentumban (jobb kattintás az egérrel, majd „Dokumentum létrehozása → Üres fájl”) hozzuk létre, aztán elmentjük a kívánt mappába euk kiterjesztéssel és megnyitjuk a Terminált, amit úgy képzelhetünk el, mint a Windows Parancssorát.

Kép:terminal.png

A cd paranccsal megkeressük a mappát, amiben dolgozni szeretnénk. Ha a mappa nevében nincs szóköz, nem szükséges idézőjelbe rakni. Majd az euk2eps utasítás után begépeljük a korábban elmentett fájl nevét kiterjesztéssel együtt.

Látszik, hogy az Eukleides „érzékeny” a szóközökre, írásjelekre: elég csak egy szóközt kihagyni, vagy vessző helyett pontot írni, és az ábra helyett egy üzenetet kapunk, miszerint hiba van valamelyik sorban:

Error at line 5: syntax error

Ez az üzenet nagy segítség lehet, különösen ha meglehetősen hosszú a forráskód, mert így nem kell az összes sort leellenőrizni, csak egyet.

Példák

A Morley-tétel

Morley tétele azt állítja, hogy bármely háromszögben az egyes oldalakhoz közelebb eső szögharmadolók metszéspontjai szabályos háromszöget alkotnak, amit a háromszög Morley-háromszögének is hívnak. A tételt Frank Morley fedezte fel 1899-ben. Az ábra alapján sokkal könnyebb lesz megérteni, miről is szól a tétel.

Kép:morley.jpg

Az előző képet az Eukleidesben a következő forráskód generálja:

A B C triangle
a = angle (B,A,C)
b = angle (C,B,A)
c = angle (A,C,B)
ab = angle (vector(A,B))
bc = angle (vector(B,C))
ca = angle (vector(C,A))
l1 = line (A,(ab + a/3):)
l2 = line (A,(ab + 2*a/3):)
l3 = line (B,(bc + b/3):)
l4 = line (B,(bc + 2*b/3):)
l5 = line (C,(ca + c/3):)
l6 = line (C,(ca + 2*c/3):)
D = intersection(l1,l4)
E = intersection(l3,l6)
F = intersection(l2,l5)
color(lightgray)
draw(l1) ; draw(l2)
draw(l3) ; draw(l4)
draw(l5) ; draw(l6)
color(black)
draw(A,B,C)
color(red)
draw(D,E,F)

Az első sor kódja egy általános háromszöget (triangle) generál, a 2-4. sorban kijelöljük a szögeket (angle), és ezzel a csúcsokat. Fontos megjegyezni, hogy a szögek megadásánál nem mindegy a csúcsok sorrendje. Ez történik például, ha a 3. sorban a b szög nem a CBA szög, hanem az ABC.

Kép:Morley_fail.jpg

Figyeljünk tehát arra, hogy az adott szöghöz tartozó csúcshoz viszonyítva a másik két csúcs pozitív irányban (óramutató járásával ellentétesen) kövesse egymást a képletben.

Kép:angle2.jpg

Az 5-7. sorban vektorokat illesztünk a háromszög oldalaira, és definiáljuk ezeknek a vízszintes tengellyel bezárt pozitív szögét. Például ab az AB vektor x tengellyel bezárt szöge lesz, vagyis 0°. Ezeket később nem rajzoltatjuk ki a programmal, ezért nem látszanak, de a további műveletekhez szükségesek.

A 8-13. sorban meghatározzuk és elnevezzük a szögek szögharmadolóit. Nézzük milyen logika alapján: például az l1-hez először összeadjuk ab-t az a egyharmadával, majd a kapott szög és az A pont segítségével definiálhatjuk a vonalat. Az ábráról szabad szemmel is leolvasható, hogy az „eredmény stimmel”.

Ezután a 14-16. sorban elnevezzük a szögharmadolók oldalakhoz közelebb eső metszéspontjait (intersection).

17-24.: A „color(lightgray)” utasítással halványszürkére rajzoltathatjuk ki (draw) a szögharmadolókat, majd feketére (black) váltunk, megrajzoljuk az eredeti háromszöget, és piros színt (red) adunk az egyenlő szárú háromszögnek.

Feliratok, különböző matematikai jelölések

Kép:paralelog.jpg

A B C D parallelogram(5,4,105:)
O = barycenter(A,B,C,D) 
frame(-2,-1,6,4.5) 
draw(A,B,C,D) ; draw(O) 
draw("$A$",A,0.1,-130:) 
draw("$B$",B,0.1,-30:) 
draw("$C$",C,0.1,50:) 
draw("$D$",D,0.1,130:) 
draw(segment(A,C),dotted) 
draw(segment(B,D),dotted) 
mark(segment(A,O)) 
mark(segment(O,C)) 
mark(segment(B,O),cross) 
mark(segment(O,D),cross) 
mark(B,A,D) 
mark(D,C,B) 
mark(C,B,A,double) 
mark(A,D,C,double)

Az első sor jelentése: Legyen ABCD egy parallelogramma, melynek alapja 5 cm, szára 4 cm és az alapon fekvő bal oldali szöge 105°.

A közvetlenül a szám után írt kettőspont azt jelenti, hogy az adott érték egy szöget jelöl, és mértékegysége a fok.

A második sorban elnevezzük O-nak a parallelogramma középpontját.

Bár nem látjuk, de a háttérben az Eukleides koordinátákkal számol, és alapértelmezésben minden ábrát egy olyan koordináta rendszerben rajzol meg, melynek kiterjedése [-2,8] az x-tengelyen, és [-2,6] az y-tengelyen. Előfordulhat azonban, hogy az elkészült ábra lelóg a képről, nem látszik minden részlete. Például, ha a parallelogrammánk alapja 8, szára pedig 7 cm, ezt kapjuk:

Kép:paralelog_fail1.jpg

A következőnek pedig 3 cm az alapja és 2 a szára:

Kép:paralelog_fail2.jpg

Ilyenkor a frame utasítással változtathatunk a kereten. Az első és a második változó az x-tengely és az y-tengelyek negatív kiterjedései, a harmadik és a negyedik változók pedig az x és y-tengelyek pozitív terjedelmét jelölik.

Ezek után már csak az a dolgunk, hogy kirajzoltassuk a parallelogrammát, és a kívánt jelöléseket. A pontok neveinek megjelenítésére is a draw funkció szolgál. Mint látjuk, az 5-8. sorban négy változó szerepel a draw parancs után. Az első a megjeleníteni kívánt felirat két idézőjel és dollárjel között, ami tartalmazhat matematikai módú TeX programkódot is. A második az a pont, ami mellé a feliratot akarjuk tenni. A harmadik változó azt jelenti, milyen távol legyen a ponttól a felirat. Ha ide nem írunk semmit, akkor alapértelmezésben 0,3 cm lesz a távolság. A negyedik változóval azt lehet beállítani, hogy a ponthoz képest milyen szögben helyezkedjen el a felirat.

A 9-10. sorban az átlókat rajzolhatjuk ki pontozott vonallal (dotted), szaggatottal (dashed), vagy egyszerű vonallal, ha nem írunk semmit a második változó helyére. A mark(segment(A,O)) parancs megjelöli az AO szakasz felezőpontját egy egyszerű vesszővel, vagy kereszttel (cross). A szögeket sima, vagy dupla (double) ívvel jeleníthetjük meg.

A Feuerbach-kör

A Feuerbach-kör a háromszög kilenc nevezetes pontjára szerkeszthető kör. Ezek a pontok a magasságvonalak talppontjai, az oldalfelező pontok, és a magasságpontot a csúcsokkal összekötő szakaszok felezőpontjai.

Könnyen belátható, hogy a Feuerbach-kör megegyezik a háromszög oldalfelező pontjaiból, és magasságvonalainak talppontjaiból alkotott háromszög köré írható körrel. Érdekessége, hogy sugara éppen fele, a háromszög köré írt kör sugarának; kívülről három pontban érinti a háromszög hozzáírt köreit, és belülről egy pontban a beleírt kört.

Nevezik még Euler-körnek, kilenc pont körének, Terquem-körnek, hatpontú körnek. Felfedezése Karl Wilhelm Feuerbachnak tulajdonítható.

Megszerkesztése meglehetősen bonyolult lenne, ha minden pontját magunknak kellene kiszámolnunk. A Feuerbach-kör jó példa arra, hogy az Eukleides ideális megoldás lehet, ha nem akarunk a számokkal bajlódni.

Íme az ábra, és a hozzá tartozó forráskód:

Kép:feuerbach.jpg

A B C triangle ; draw(A, B, C)
a = projection(A, line(B, C))
b = projection(B, line(A, C))
c = projection(C, line(A, B))
draw(a) ; draw(b) ; draw(c)
draw(segment(A, a), dotted)
draw(segment(B, b), dotted)
draw(segment(C, c), dotted)
draw(barycenter(A, B))
draw(barycenter(B, C))
draw(barycenter(C, A))
draw(circle(a, b, c))
M = orthocenter(A,B,C)
draw(barycenter(A,M))
draw(barycenter(B,M))
draw(barycenter(C,M))

A magasságvonalak talppontjait a csúcsok szemközti oldalra történő projekciójával (projection) határozzuk meg, majd kirajzoltatjuk őket. A 6-8. és 9- 11. sorban láthatjuk, hogyan kell két pont által megadott szakaszt illetve a szakasz felezőpontját (barycenter) megjeleníteni. Alapesetben a kört középpontja, és sugara segítségével rajzoljuk meg, de mivel ezeket az adatokat most nem tudjuk, három pontjával írjuk le. A háromszög magasságpontját (orthocenter) elnevezzük M-nek, hogy az utolsó sorokban hivatkozhassunk rá a szakaszfelezők megrajzolásánál.

Egy klasszikus mozgókép-probléma

Sok esetben sokkal könnyebb megérteni egy geometriai tételt vagy feladatot, ha nem egy állapotot látunk, hanem egy folyamatot. Rengeteg matematikai program van, ami nem csak statikus képeket, hanem folyamatábrát is meg tud jeleníteni. Ezért jött létre a Xeukleides segédprogram, melynek az Eukleidesszel ellentétben van grafikus felülete. Ez indításkor úgy néz ki, mint egy egyszerű szövegszerkesztő, ám ha a megfelelő parancsok beírása után megnyomjuk az ESC billentyűt, a szöveg helyén egy grafikus felület jelenik meg, ahol a kurzormozgató gombok segítségével megtekinthetjük a folyamatábra egyes állapotait.

Kép:mozgokep.jpg

x interactive(2,.1,0,6,"A",right)
A M I equilateral(x) 
M B J equilateral(6-x) 
color(lightgray) 
draw(segment(I,J)) 
color(black) 
draw(A,M,I) ; draw(M,B,J) 
draw(barycenter(I,J))

Az ESC megnyomásával újból visszajutunk a szövegszerkesztő felülethez. Az első sorban azt látjuk, hogy x az interaktív változó, 2 a kezdőértéke, ami 0 és 6 között lépésenként egy tizeddel változhat. A parancs ötödik változója egy billentyűre utal, amit meg kell nyomni, mielőtt változtatjuk x értékét a jobb/bal kurzormozgató billentyűk kombinációjával (right), vagy a fel/le párosítással (up).

Fontos megjegyezni, hogy a jelenlegi Ubuntu verzióból a Xeukleides segédprogram hiányzik.

Kúpszeletek

Az Eukleides nem csak pontok, vonalak és sokszögek ábrázolására használható, hanem kiváló megoldás különböző kúpszeletek, vagyis az egyenes körkúp síkmetszeteinek gyors és egyszerű ábrázolására.

Két jól ismert kúpszelet a kör és az ellipszis. Ezek akkor jönnek létre, ha a kúp és sík metszete zárt görbe. A kör az ellipszis speciális esete akkor, ha a sík merőleges a kúp tengelyére. Körök rajzolására már láttunk példát korábban. Ha a sík párhuzamos a kúp alkotójával, a kúpszeletet parabolának hívják. Végül, ha a metszet nyitott görbe és nem párhuzamos az alkotóval, a görbe hiperbola. Ebben az esetben a sík a kúp mindkét felét áthatja két széteső görbét alkotva.

1: parabola; 2: ellipszis; 3: hiperbola

Parabola ábrázolásához az Eukleidesben elegendő megadni a fókuszpontot (A), és a direktrixet (l); az ellipszishez a középpontot (B), a félnagytengelyt, a félkistengelyt, és a főtengely vízszintessel bezárt szögét; a hiperbolához pedig a középpontot (C), a valós tengely felét, a képzetes tengely felét, és végül a főtengely vízszintessel bezárt szögét:

l = line(point(3,0),point(0,3))
A = point(2.5,0) 
p = parabola(A,l) 
draw(p) ; draw(A)

B = point(2,2) 
e = ellipse(B,3,1,0:) 
draw(e, dotted) ; draw(B)

C = point(2,3) 
h = hyperbola(C,1,1,90:) 
draw(h, dashed) ; draw(C)

Kép:conics1.jpg

Még ennél is egyszerűbben ábrázolhatjuk a kúpszeleteket (conic), ha tisztában vagyunk az excentricitás fogalmával. Az excentricitás (e) a kúpszelet középpontja és fókuszpontja közötti távolságnak és a félnagytengely hosszának hányadosa. Körről beszélünk, ha ez az érték 0, ellipszisről, ha 0 és 1 közé esik, paraboláról, ha 1, és hiperboláról, ha nagyobb mint 1.

l = line(point(3,0),point(0,3))
A = point(2,2) 
draw(A) ; draw(l, dashed) 
c = conic(A,l,0.5) ; draw(c) 
c1 = conic(A,l,1) ; draw(c1) 
c2 = conic(A,l,2) ; draw(c2)

Mint látjuk, minden kúpszelet meghatározható fókuszpontjával (A), vezéregyenesével (l) és excentricitásával.

Kép:conics2.jpg

Összegzés

Az eddigi példák az Eukleides 1.0.3-as verziójára vonatkoznak, de már létezik egy új, 1.5.3-as verzió, melyhez az alkotó, Christian Obrecht részletes leírást is készített. A program és a leírás is letölthető az internetről (itt), de mivel nagyon új (2010), még nem terjedt el széles körben.

Telepítés után az /usr/share/doc/eukleides mappában az 1.0.3-as verzióhoz is megtalálhatjuk a teljes használati utasítást, további példákat, és azok forráskódjait, a parancsok névjegyzékét, valamint oktató célú leírásokat.

Az Eukleides egyszerűségében és célszerűségében kiemelkedő, ugyanakkor elég hatásos ahhoz, hogy majdnem minden ábrát el lehessen vele készíteni, amit egy általános iskolás matematika tankönyvben láthatunk.

Nem csak szemléltető ábrák készítésére alkalmas, hanem arra is, hogy a tanulók önálló kísérletezés után saját maguk fedezzék fel a matematikai tételeket, összefüggéseket, hiszen ez a számítógéppel támogatott matematika oktatásának legfontosabb eleme.

Léteznek konkurens szoftverek is, például a GeoGebra, amely könnyű használhatósága és dinamikus grafikus felülete miatt alkalmasabb oktatási célokra, azonban az Eukleidesnek lényegesen kisebb a gépigénye, és a matematikus világban elterjedt TeX matematikai szövegszerkesztővel való együttműködése is sokkal jobb.

Felhasznált irodalom

  • TUGboat, Volume 22 (2001), No. 4; Eukleides: A geometry drawing language

www.tug.org/TUGboat/Articles/tb22-4/tb72obre.pdf

Személyes eszközök