Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010.

Slides:



Advertisements
Hasonló előadás
A sin függvény grafikonja
Advertisements

Készítette: Nagy Mihály tanár Perecsen, 2006.
A háromszög elemi geometriája és a terület
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Programozási alapismeretek
Számítógépes geometriai leíró nyelvek
MI 2003/9 - 1 Alakfelismerés alapproblémája: adott objektumok egy halmaza, továbbá osztályok (kategóriák) egy halmaza. Feladatunk: az objektumokat - valamilyen.
ALAKZATOK TRANSZFORMÁCIÓJA ÚJ KÉPSÍKOK BEVEZETÉSÉVEL
Programozási alapismeretek 6. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 6.2/  Rekordok/struktúrák.
2009 Bevezetés a programozásba Krankovits Melinda.
Geometriai Transzformációk
Analitikus (koordináta) geometriai gyorstalpaló
Geometriai transzformációk
Algebrai specifikációk Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/  Sorozatszámítás.
Programozási alapismeretek
Intervallum.
Párhuzamos egyenesek szerkesztése
SzTE JGYTFK Matematika Tanszék
Térgeometria I. Térelemek és ábrázolásuk
OPERÁCIÓKUTATÁS Kalmár János, 2011 Tartalom Több lineáris célfüggvényes LP Tiszta egészértékű LP.
2. előadás GÉPRAJZ, GÉPELEMEK I..
3. előadás GÉPRAJZ, GÉPELEMEK I..
Háromszögek szerkesztése 3.
Bevezetés a matematikába I
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Copyright, 1999 © Szlávi Péter Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
PTE PMMK Matematika Tanszék dr. Klincsik Mihály Matematika III. előadások MINB083, MILB083 Gépész és Villamosmérnök szak BSc képzés 2007/2008. őszi félév.
Matematika III. előadások MINB083, MILB083
Térelemek ábrázolása hatiránypontos perspektívában
Koordináta-geometria
2. Koordináta-rendszerek és transzformációk
2. Koordináta-rendszerek és transzformációk
Szögfüggvények általánosítása
ALAPVETŐ TÉRELEMEK KÉT KÉPSÍKOS ÁBRÁZOLÁSA
Lineáris függvények ábrázolása
1. feladat Az ábrán egy épülő ház tetőszerkezetét látjuk. A „mester” szerint ez akkor lesz a legstabilabb, ha a „ferde” CD nyeregtetőt annak F felezőpontjában,
Operátorok Értékadások
A háromszög elemi geometriája és a terület
Analitikus geometria gyorstalpaló
Vektorterek Definíció. Legyen V Abel-csoport, F test, továbbá
Gráfok 1. Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék
Copyright, 1999 © Szlávi Péter Sor típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Dinamikus programozás
2.2. Az egyenes és a sík egyenlete
1 Vektorok, mátrixok.
előadások, konzultációk
A folytonosság Digitális tananyag.
A gyakorisági sorok grafikus ábrázolása
Egy GeoGebra verseny terve
Programtervezés, programozás I. 2.5 tömbök,stringek
Weboldalba ágyazott interaktív feladatok GeoGebra módra Papp-Varga Zsuzsanna ELTE IK Média- és Oktatásinformatika Tanszék
Testmodellezés Készítette: Esztergályos Gusztáv. Témák  Felületek megadásának matematikai alapja  Poligonokkal határolt felületek  explicit reprezentáció.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Készítette: Horváth Zoltán
Programozás C# -ban Elágazások.
Algebrai geometriai számítások
Bevezetés Tematika Számonkérés Irodalom
ELEMI GEOMETRIAI ISMERETEK
Informatikai gyakorlatok 11. évfolyam
Cím elrendezés Alcím.
Cím elrendezés Alcím.
Cím elrendezés Alcím.
Geometriai Algoritmusok
Cím elrendezés alcím.
Cím Alcím.
Térgeometria I. Térelemek és ábrázolásuk
Cím elrendezés Alcím.
Szögfüggvények és alkalmazásai Készítette: Hosszú Ildikó Nincs Készen.
Előadás másolata:

Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás2/29 Tartalom Bevezetés Alapvető típusok Pont Szakasz Pontsorozat Megvalósító modul Első feladat Második feladat Harmadik feladat         

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás3/29 Bevezetés A feladatok köre néhány jellemző példán keresztül… Pontok összekötése zárt, nem-metsző poligonná. P6P6 P5P5 P2P2 P1P1 P3P3 P4P4 P 1  P 5  P 2  P 6  P 3  P 4

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás4/29 Bevezetés 3 pont „forgásiránya”. P R Q R’

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás5/29 Bevezetés Egy pont adott poligon belső pontja-e? Egy pont adott szakaszra illeszkedik-e? 2 szakasz metsző-e? Ha igen, mi a metszéspontjuk? Ponthalmaz konvex burka.

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás6/29 Bevezetés A(z origóból) látható négyzetek (pl. megszámlálása). O

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás7/29 Alapvető típusok A tipikus geometriai feladat megoldása az alábbi típusú adatokkal szervezhető meg: Pont Szakasz = 2 (vég)pont Pontsorozat = sok, adott sorrendű pont Mint a típusok megadásánál lenni szokott, definiálni kell a(z): ábrázolást – reprezentáció művelethalmazt – implementáció

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás8/29 Alapvető típusok – Pont Pont Ábrázolás: TPont=Rekord(x,y:Valós) TJóPontE=Függvény(Konst p:TPont):Logikai Művelethalmaz: PontKiirás(Konst kezd:Szöveg, p:TPont, zár:Szöveg) [kezd és zár között formázva jeleníti meg a pont koordinátáit; lehetővé téve az egy sorba és a külön sorba szervezést] PontBeolvasás(Konst kérd:Szöveg, Vált p:TPont, Konst OlyanE:TJóPontE):Logikai [az OlyanE fv állapítja meg, hogy megfelelő-e a beolvasott pont] Eljárás Eljárás A beolvasás ellenőrzéséhez. Pl.: EgységPontE, EgységBelsőPontE

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás9/29 FP-ban: Operator =(Const p,q:TPont) l:Boolean; //l kapja értékül –az operátor tör- zsében– az operáció végeredmé- nyét Alapvető típusok – Pont Operátor =(Konst p,q:TPont):Logikai Operátor +(Konst p,q:TPont):TPont Operátor –(Konst p,q:TPont):TPont Operátor *(Konst p:TPont, a:Valós):TPont [’p’ vektor az ’a’ skalárral való jobbról szorzata] Operátor *(Konst a:Valós, p:TPont):TPont [’p’ vektor az ’a’ skalárral való balról szorzata] Függvény Norma(Konst p:TPont):Valós [euklideszi-normája, azaz az origótól számított távolsága]

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás10/29 Alapvető típusok – Pont Operátor *(Konst p,q:TPont):Valós [ ez a matematikában szokásos 2-változós keresztszorzat művelet: _  _: TPont 2  R; p1  p2:=p1.x*p2.y-p2.x*p1.y A p1  p2 művelet a ( ,p1,p2,p1+p2) pontok által kijelölt paralelogramma előjeles területét adja. ] Tulajdonságai az alábbi ábra alapján kideríthetők: Ha a p az 1. vagy a 4. síknegyedben van, akkor az o_p-re illeszkedő egyenes feletti pontokra a p  r>0, alatti pontokra 0, alatti pontokra <0… … ha a p a 2. vagy a 3. síknegyedben van, akkor pont fordítva, azaz p  r 0

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás11/29 Alapvető típusok – Pont Függvény ForgásIrány(Konst p,q,r:TPont):{–1,0,+1} [p  q  r balforgású, kollineáris, jobbforgású esetben] Megközelítése: KeresztSzorzat: TPont 3  R KeresztSzorzat(p,q,r):=(q-p)  (r-p)= =(q.y-p.y)*(r.x-p.x)-(r.y-p.y)*(q.x-p.x) Állítás: Ha a KeresztSzorzat(p,q,r)>0, akkor a KeresztSzorzat(p,q,r’)<0, ahol r’ az r tükörképe a p_q-ra illeszkedő egyenesre nézve. Innen már jön a ForgásIrány fv implementálása. Hogyan? Azaz az óra járásával ellentétes irányúak. Azaz egy egyenesre illeszkednek.

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás12/29 Alapvető típusok – Szakasz Szakasz Ábrázolás: TSzakasz=Rekord(p[=kezdőpont],q[=végpont]:TPont) TJóSzakaszE=Függvény(Konst sz:TSzakasz):Logikai Művelethalmaz: SzakaszKiírás(Konst kezd:Szöveg, s:TSzakasz, zár:Szöveg) [kezd és zár között formázva jeleníti meg a pont koordinátáit; lehetővé téve az egy sorba és a külön sorba szervezést] SzakaszBeolvasás(Konst kérd:Szöveg, Vált s:TSzakasz, Konst OlyanE:TJóSzakaszE):Logikai [az OlyanE állapítja meg, hogy megfelelő-e a beolvasott szakasz] Függvény Hossz(Konst s:TSzakasz):Valós Eljárás Eljárás A beolvasás ellenőrzéséhez. Pl. BármilyenSzakaszE, EgységSzakaszE

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás13/29 Alapvető típusok – Szakasz Operátor =(Konst s1,s2:TSzakasz):Logikai [egyenlők-e: hosszuk és irányuk megegyezik-e] Függvény Irányszög(Konst s:TSzakasz):Valós Az s szakaszhoz jelölje R:=s.q-s.p:TPont „irányvektort”, arc(R):=arcTg(R.y/R.x), akkor 1. Irányszög(sz)=  /2, ha R.x=0 és R.y  0 (az „Y-tengelyen felfelé”) 2. Irányszög(sz)=3*  /2, ha R.x=0 és R.y<0 (az „Y-tengelyen lefelé”) 3. Irányszög(sz)=arc(R), ha R.x>0 és R.y  0 (az 1. sn.-ben) 4. Irányszög(sz)=  –arc(R’), ha R.x<0 és R.y  0 (a 2. sn.-ben), ahol R’:=(-R.x,R.y) [azaz az R 1. sn.-beli „tükörképe”] 5. Irányszög(sz)=  +arc(R), ha R.x<0 és R.y<0 (a 3. sn.-ben) 6. Irányszög(sz)=2*  –arc(R’), ha R.x>0 és R.y<0 (a 4. sn.-ben), ahol R’:=(R.x,-R.y) [azaz az R 1. sn.-beli „tükörképe”] Innen már jön az Irányszög fv implementálása. Hogyan?

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás14/29 Alapvető típusok – Szakasz Függvény SzakaszonE(Konst s:TSzakasz; r:TPont):Logikai Állítás: p,q,r  TPont egy egyenesen vannak  KeresztSzorzat(p,q,r)=0 Állítás: ha p,q,r  TPont egy egyenesen vannak és r.x  [Min(p.x,q.x)..Max(p.x,q.x)], r.y  [Min(p.y,q.y)..Max(p.y,q.y)] akkor az r a p_q szakaszon. Innen már jön az SzakaszonE fv implementálása. Hogyan?

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás15/29 Alapvető típusok – Szakasz Függvény SzakaszPárMetszőE(Konst s1,s2:TSzakasz):Logikai Állítás: A szakaszok metszőség-vizsgálatát a ForgásIrány-vizsgálatra lehet alapozni.ForgásIrány Alapesetek: S 1.p S 2.p S 1.q S 2.q S 1.p S 1.q S 1.p S 2.p S 2.q S 2.p S 2.q a.) b.) c.) d.) S 2.p S 2.q

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás16/29 Alapvető típusok – Szakasz ForgásIrány(s1.p,s1.q,s2.p)=ForgásIrány(s1.p,s1.q,s2.q) és ForgásIrány(s2.p,s2.q,s1.p)=ForgásIrány(s2.p,s2.q,s1.q) ForgásIrány(s2.p,s2.q,s1.p)=ForgásIrány(s2.p,s2.q,s1.q) és ForgásIrány(s1.p,s1.q,s2.p)=-ForgásIrány(s1.p,s1.q,s2.q) S 1.p S 2.p S 1.q S 2.q a.) S 1.q S 1.p S 2.p S 2.q b.)

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás17/29 Alapvető típusok – Szakasz ForgásIrány(s1.p,s1.q,s2.p)=0 és ForgásIrány(s1.p,s1.q,s2.q)  0 és ForgásIrány(s2.p,s2.q,s1.p)=-ForgásIrány(s2.p,s2.q,s1.q) ForgásIrány(s2.p,s2.q,s1.p)=-ForgásIrány(s2.p,s2.q,s1.q) és ForgásIrány(s2.p,s2.q,s1.p)=-ForgásIrány(s2.p,s2.q,s1.q) Innen már jön az SzakaszPárMetszőE fv implemen- tálása. Hogyan? S 1.q S 1.p S 2.p S 2.q d.) S 1.p S 1.q c.) S 2.p S 2.q

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás18/29 Alapvető típusok – Szakasz SzakaszPárMetszéspont(Konst s1,s2:TSzakasz; Vált r:TPont) Allítás: Az s 1 _s 2 szakaszoknak az r metszéspontja, ha van metszéspontja s 1 -nek és s 2 -nek, továbbá  t i  [0..1]: r i (t i )=s i.p+t i *(s i.q–s i.p) (i=1,2): r 1 (t 1 )=r 2 (t 2 ) ekkor r:=r 1 =r 2 Innen már jön az SzakaszPárMetszéspont eljárás implemen- tálása. Hogyan? Eljárás

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás19/29 Alapvető típusok – Szakasz Függvény MerőlegesekE(Konst s1,s2:TSzakasz):Logikai Allítás: Ha =0, akkor s1, s2 merőlegesek egy- másra. Ahol :=Q.x*R.x+Q.y*R.y [az a „két vektor skaláris szorzata” művelet]. Innen már jön a MerőlegesekE fv implementálása. Hogyan?

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás20/29 Alapvető típusok – Szakasz Függvény Merőleges(Konst s:TSzakasz, r:TPont):TSzakasz [Uf: az s szakaszt tartalmazó egyenesre merőleges szakasz, amely egyik végpontja az r] Allítás: Az r-en átmenő s-re merőleges egyenest a következő lépésekben kaphatjuk meg: 1.  :=IránySzög(s) 2. Forgatásmátrix: FM(  )= 3. rr forgatása: rr:=(r-p)*FM(  ) 4. rr projekciója az x-tengelyre: rr.y:=0 5. VisszaForgatásMátrix: FM(-  ) 6. rr visszaforgatása: p:=rr*FM(-  )+p

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás21/29 Alapvető típusok – Szakasz A lépések:

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás22/29 Alapvető típusok – Szakasz A lépések (folytatás) : Innen már jön a Merőleges fv implementálása. Hogyan?

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás23/29 Alapvető típusok – Pontsorozat Pontsorozat Ábrázolás: Konstans MaxN:Egész(???) TPontSor=Rekord(db:Egész, pontok:Tömb(1..MaxN:TPont)) Művelethalmaz: Konstans UresPontSor:TPontSor(db:0,pontok:) Függvény ElemSzám(Konst ps:TPontSor):Egész Operátor +(Konst ps:TPontSor, p:TPont):TPontSor [bővíti a pontsort újabb ponttal, ha lehet] Készítse el a geometriai típusok teljes, egyesített modulját (GeomUnit), majd egy tesztelő programot GeomUnit-hoz!

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás24/29 Első feladat (ujjgyakorlat) A fenti típusok műveleteinek gyakorlásaként adjuk meg két szakasz metszéspontját, ha van! Legfelsőbb szint: Program SzakaszMetszésPont_keresés: Konstans CrLf=Karakter(10)+Karakter(13) Változó s1,s2:TSzakasz r:TPont OK:Logikai OK:=SzakaszBeolvasás('Adja meg az S1 szakaszt!',s1, BármilyenSzakaszE) OK:=SzakaszBeolvasás('Adja meg az S2 szakaszt!',s2, BármilyenSzakaszE) Ha SzakaszParMetszőE(s1,s2) akkor SzakaszPárMetszéspont(s1,s2,r) PontKiírás('Van metszéspontjuk, mégpedig:',r,CrLf) különben Ki: 'Nincs metszéspontjuk.' Elágazás vége Program vége.

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás25/29 Második feladat Adott N darab (nem kollineáris) pont. Adjuk meg a pontok olyan sorrendjét, amelyben az egymást köve- tőket, és az utolsót az elsővel összekötve zárt, nem- metsző poligont kapunk! Megoldásötlet: a ponthalmaz pontjainak egy alkalmas sorrendjét kapjuk, ha a legbaloldalibb-legalsó pontból „nézve” iránytangensük szerint rendezzük.

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás26/29 Második feladat lba=P 6 P5P5 P2P2 P1P1 P3P3 P4P4 P7P7 P8P8 P9P9 P 10

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás27/29 Második feladat lba=P 6 P5P5 P2P2 P1P1 P3P3 P4P4 P 6  P 4  P 9  P 10  P 1  P 3  P 7  P 5  P 8  P 2  P 6 P7P7 P8P8 P9P9 P 10

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás28/29 Harmadik feladat Adott N darab (nem kollineáris) pont. Adjuk meg a pontok konvex burkát! Megoldásötlet: az előző feladat megoldása ( a ponthalmaz pontjainak egy alkalmas sorrendjét kapjuk, ha a legbaloldalibb-legalsó pontból „nézve” iránytangen- sük szerint rendezzük ) után, ( balsodrásúan ) sorra vesszük az egyes pontokat, és megpró- báljuk bővíteni velük a burkot, ha egy pontnál az előző kettő ponttal együtt jobbsodrásúvá válik ( azaz konkávvá ), ak- kor az előző pontot eldobjuk és újra értékeljük a helyzetet.

Geometriai feladatok programozása * Geometriai programozás * 2010Szlávi: Geometriai programozás29/29 Harmadik feladat Megoldásötletet az alábbi ábra mutatja: p7p7 p 6 =p 11 p5p5 p2p2 p1p1 p3p3 p4p4 P 6  [P 4  P 9  ]P 10  P 1  [P 3  P 7  ]P 5  [P 2  ]P 8  P 11 p8p8 p9p9 p 10 pp 1, pp 2, pp 3, pp 4, pp 5, pp 6