Milyen alakzatot rajzol ki a tkinter Canvas create_oval() metódusa?

Az angol oval szó jelentése magyarul ovális; szó szerint tojás alakú, a latin ovum (tojás) szóból eredően. Ovális formákat számos helyen láthatunk a hétköznapi életben, például: kanál, versenypálya, tükör, úszómedence, tojás, rögbi labda, emberi szem. Az ovális alakzatok közös jellemzője, hogy zártak, konvexek, nem tartalmaznak egyenes vonalat vagy csúcsot, és sok esetben tengelyesen szimmetrikusak.

Az ovális forma hasonlít az ellipszishez, de nem azonos vele. Úgy is mondhatjuk, hogy minden ellipszis ovális, de nem minden ovális alakzat ellipszis. Valójában az ovális alakzatnak az említett közös jellemzőkön kívül nincs pontos geometriai definíciója, viszont az ellipszisnek mint tudjuk van: olyan pontok halmaza a síkban, amelyek két adott ponttól (fókuszpontok) mért távolságainak összege állandó.

Például ovális formát létre lehet hozni két azonos sugárral rendelkező átlapolódó körből kiindulva, de az alakzat nem felel meg az ellipszis definíciójának.

Miért érdekes mindez?

Azért, mert a tkinter modul Canvas grafikus elemén ki tudunk rajzoltatni egy ovális alakzatot a create_oval() metódussal, megadva a befoglaló négyszög bal felső és jobb alsó sarokpontjainak koordinátáit. Ha ezt megtesszük, akkor egy ellipszishez hasonló formát kapunk.

Bizonyos alkalmazásokban szeretnénk pontos ellipszist rajzolni, ezért jó lenne tudni, hogy a create_oval() által kirajzolt alakzat csak hasonlít egy ellipszishez, vagy ténylegesen egy ellipszist kapunk. Azonban a help a create_oval() metódusról csak ennyi információt ad:

„Help on function create_oval in module tkinter:

create_oval(self, *args, **kw)

Create oval with coordinates x1,y1,x2,y2.”

/És a tkinter alapját képező Tcl/Tk dokumentációja sem említi az ellipszist/

Ha a neten keresgélünk, akkor szintén azt olvashatjuk, hogy a metódus oválist rajzol, és csak ritkán említik, hogy egy ellipszist.

Próbáljuk, akkor magunk kideríteni mi a helyzet.

Mivel a kirajzolt ovális forma pontjai nem állnak rendelkezésre, így az ellipszist leíró egyenletbe történő behelyettesítéssel ezt nem tudjuk ellenőrizni. Jobb híján marad a vizuális összevetés. Ahhoz, hogy ez minél pontosabb tudjon lenni, a következőket tesszük:

– Kirajzolunk egy ellipszist a paraméteres egyenletei alapján (lásd pl. Wikipédia Ellipszis (görbe) szócikknél)

– Kirajzoltatunk egy oválist a Canvas create_oval() metódussal, ahol a befoglaló négyszög oldalai ugyanolyan hosszúak, mint az ellipszis nagy- és kistengelye. Az ovális alakzatot valamilyen kitöltő színnel jelenítjük meg.

Ha az ovális valójában egy ellipszis, akkor az általunk rajzolt ellipszis az ovális körvonala lesz. Ha viszont az ovális nem ellipszis, akkor ezt vizuálisan kell, hogy érzékeljük.

Az ezt megvalósító programot láthatjuk alább. A kommentek segítik a megértést.

Néhány változatra lefuttatva, a kirajzolt formákat a következő ábrán láthatjuk.

Az eredményképekből levonhatjuk a következtetést, hogy a Canvas create_oval() metódusa ellipszist (vagy speciálisan, ha a befoglaló négyszög egy négyzet, akkor egy kört) jelenít meg. Ha nem így lenne, akkor az oval alakzat az ábrán vagy kitakarná az ellipszis bizonyos pontjait vagy a vászon háttérszíne látszódna.

A grafikus felhasználói felület létrehozásával, benne a Canvas elem példákkal illusztrált részletes leírásával a Python tudásépítés lépésről lépésre című e-könyv „Grafikus felhasználói felület készítése” fejezete foglalkozik.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.