Geometriai feladatok programozsa Geometriai programozs Szlvi Pter szlavipelte

  • Slides: 29
Download presentation
Geometriai feladatok programozása Geometriai programozás Szlávi Péter szlavip@elte. hu ELTE IK Média- és Oktatásinformatika

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

Geometriai programozás * Geometriai feladatok programozása * Tartalom l l Bevezetés Alapvető típusok l

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

Geometriai programozás * Geometriai feladatok programozása * Bevezetés l A feladatok köre néhány jellemző

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

Geometriai programozás * Geometriai feladatok programozása * Bevezetés l 3 pont „forgásiránya”. R’ Q

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

Geometriai programozás * Geometriai feladatok programozása * Bevezetés l l 2010 Egy pont adott

Geometriai programozás * Geometriai feladatok programozása * Bevezetés l l 2010 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. Szlávi: Geometriai programozás 5

Geometriai programozás * Geometriai feladatok programozása * Bevezetés l A(z origóból) látható négyzetek (pl.

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

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok l A tipikus geometriai feladat

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

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Ábrázolás: l

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Ábrázolás: l l l Művelethalmaz: l Eljárás 2010 TPont=Rekord(x, y: Valós) TJóPont. E=Függvény(Konst p: TPont): Logikai A beolvasás ellenőrzéséhez. Pl. : Egység. Pont. E, Egység. BelsőPont. E Pont. Kiirá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] Pont. Beolvasás(Konst kérd: Szöveg, Vált p: TPont, Konst Olyan. E: TJóPont. E): Logikai [az Olyan. E fv állapítja meg, hogy megfelelő-e a beolvasott pont] Szlávi: Geometriai programozás 8

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Operátor =(Konst

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

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Operátor *(Konst

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Operátor *(Konst p, q: TPont): Valós [ez a matematikában szokásos 2 -változós keresztszorzat művelet: _ _: TPont 2 R; p 1 p 2: =p 1. x*p 2. y-p 2. x*p 1. y A p 1 p 2 művelet a ( , p 1, p 2, p 1+p 2) 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… 2010 … ha a p a 2. vagy a 3. síknegyedben van, akkor pont fordítva, azaz p r<0, alatti pontokra >0 Szlávi: Geometriai programozás 10

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Függvény Forgás.

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pont l Függvény Forgás. Irány(Konst p, q, r: TPont): {– 1, 0, +1} [p q r balforgású, kollineáris, jobbforgású esetben] Azaz az óra járásával ellentétes irányúak. Azaz egyenesre illeszkednek. Megközelítése: Kereszt. Szorzat: TPont 3 R Kereszt. Szorzat(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 Kereszt. Szorzat(p, q, r)>0 , akkor a Kereszt. Szorzat(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ás. Irány fv implementálása. Hogyan? 2010 Szlávi: Geometriai programozás 11

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Ábrázolás: l

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Ábrázolás: l l l Művelethalmaz: l Eljárás l 2010 TSzakasz=Rekord(p[=kezdőpont], q[=végpont]: TPont) TJóSzakasz. E=Függvény(Konst sz: TSzakasz): Logikai A beolvasás ellenőrzéséhez. Pl. Bármilyen. Szakasz. E, Egység. Szakasz. E Szakasz. Kií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] Szakasz. Beolvasás(Konst kérd: Szöveg, Vált s: TSzakasz, Konst Olyan. E: TJóSzakasz. E): Logikai [az Olyan. E állapítja meg, hogy megfelelő-e a beolvasott szakasz] Függvény Hossz(Konst s: TSzakasz): Valós Szlávi: Geometriai programozás 12

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l l Operátor

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l l Operátor =(Konst s 1, s 2: 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): =arc. Tg(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? 2010 Szlávi: Geometriai programozás 13

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Szakaszon.

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Szakaszon. E(Konst s: TSzakasz; r: TPont): Logikai Állítás: p, q, r TPont egyenesen vannak Kereszt. Szorzat(p, q, r)=0 Állítás: ha p, q, r TPont 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 Szakaszon. E fv implementálása. Hogyan? 2010 Szlávi: Geometriai programozás 14

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Szakasz.

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Szakasz. Pár. MetszőE(Konst s 1, s 2: TSzakasz): Logikai Állítás: A szakaszok metszőség-vizsgálatát a Forgás. Irányvizsgálatra lehet alapozni. S. q S. p S. q Alapesetek: S. q 1 2 2 2 S 1. q 2 S 1. p a. ) b. ) S 1. q S 2. p S 2. q S 1. p 2010 S 1. q S 2. q S 1. p c. ) Szlávi: Geometriai programozás d. ) 15

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz S 1. q

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz S 1. q S 2. p S 1. p S 2. q Forgás. Irány(s 1. p, s 1. q, s 2. p)=Forgás. Irány(s 1. p, s 1. q, s 2. q) és Forgás. Irány(s 2. p, s 2. q, s 1. p)=Forgás. Irány(s 2. p, s 2. q, s 1. q) a. ) S 2. p S 1. q S 1. p b. ) 2010 S 2. q Forgás. Irány(s 2. p, s 2. q, s 1. p)=Forgás. Irány(s 2. p, s 2. q, s 1. q) és Forgás. Irány(s 1. p, s 1. q, s 2. p)=Forgás. Irány(s 1. p, s 1. q, s 2. q) Szlávi: Geometriai programozás 16

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz S 1. q

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz S 1. q S 2. p S 2. q S 1. p c. ) S 1. q S 2. p S 2. q S 1. p d. ) 2010 Forgás. Irány(s 1. p, s 1. q, s 2. p)=0 és Forgás. Irány(s 1. p, s 1. q, s 2. q) 0 és Forgás. Irány(s 2. p, s 2. q, s 1. p)=Forgás. Irány(s 2. p, s 2. q, s 1. q) Innen már jön az Szakasz. Pár. MetszőE fv implemen- 17 Szlávi: Geometriai programozás

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Eljárás Szakasz.

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Eljárás Szakasz. Pár. Metszéspont(Konst s 1, s 2: 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á ti [0. . 1]: ri(ti)=si. p+ti*(si. q–si. p) (i=1, 2): r 1(t 1)=r 2(t 2) ekkor r: =r 1=r 2 Innen már jön az Szakasz. Pár. Metszéspont eljárás implementálása. Hogyan? 2010 Szlávi: Geometriai programozás 18

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Merőlegesek.

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Merőlegesek. E(Konst s 1, s 2: TSzakasz): Logikai Allítás: Ha <s 1. q–s 1. p, s 2. q–s 2. p>=0, akkor s 1, s 2 merőlegesek egymásra. Ahol <Q, R>: =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őlegesek. E fv implementálása. Hogyan? 2010 Szlávi: Geometriai programozás 19

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l Függvény Merőleges(Konst

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz l 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: 2010 1. : =Irány. Szö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. Vissza. Forgatás. Mátrix: FM(- ) 6. rr visszaforgatása: p: =rr*FM(- )+p Szlávi: Geometriai programozás 20

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

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

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Szakasz A lépések (folytatás):

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

Geometriai programozás * Geometriai feladatok programozása * Alapvető típusok – Pontsorozat l Ábrázolás: l

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

Geometriai programozás * Geometriai feladatok programozása * Első feladat (ujjgyakorlat) l l A fenti

Geometriai programozás * Geometriai feladatok programozása * Első feladat (ujjgyakorlat) l l A fenti típusok műveleteinek gyakorlásaként adjuk meg két szakasz metszéspontját, ha van! Legfelsőbb szint: Program Szakasz. Metszés. Pont_keresés: Konstans Cr. Lf=Karakter(10)+Karakter(13) Változó s 1, s 2: TSzakasz r: TPont OK: Logikai OK: =Szakasz. Beolvasás('Adja meg az S 1 szakaszt!', s 1, Bármilyen. Szakasz. E) OK: =Szakasz. Beolvasás('Adja meg az S 2 szakaszt!', s 2, Bármilyen. Szakasz. E) Ha Szakasz. Par. MetszőE(s 1, s 2) akkor Szakasz. Pár. Metszéspont(s 1, s 2, r) Pont. Kiírás('Van metszéspontjuk, mégpedig: ', r, Cr. Lf) különben Ki: 'Nincs metszéspontjuk. ' Elágazás vége Program vége. 2010 Szlávi: Geometriai programozás 24

Geometriai programozás * Geometriai feladatok programozása * Második feladat l l 2010 Adott N

Geometriai programozás * Geometriai feladatok programozása * Második feladat l l 2010 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 legbaloldalibblegalsó pontból „nézve” iránytangensük szerint rendezzük. Szlávi: Geometriai programozás 25

Geometriai programozás * Geometriai feladatok programozása * Második feladat P 8 P 2 lba=P

Geometriai programozás * Geometriai feladatok programozása * Második feladat P 8 P 2 lba=P 6 P 7 P 5 P 3 P 4 P 9 P 10 P 1 2010 Szlávi: Geometriai programozás 26

Geometriai programozás * Geometriai feladatok programozása * Második feladat P 8 P 2 lba=P

Geometriai programozás * Geometriai feladatok programozása * Második feladat P 8 P 2 lba=P 6 P 7 P 5 P 3 P 4 P 9 P 10 P 1 P 6 P 4 P 9 P 10 P 1 P 3 P 7 P 5 P 8 P 2 P 6 2010 Szlávi: Geometriai programozás 27

Geometriai programozás * Geometriai feladatok programozása * Harmadik feladat l l Adott N darab

Geometriai programozás * Geometriai feladatok programozása * Harmadik feladat l l Adott N darab (nem kollineáris) pont. Adjuk meg a pontok konvex burkát! Megoldásötlet: l 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, l 2010 (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. Szlávi: Geometriai programozás 28

Geometriai programozás * Geometriai feladatok programozása * Harmadik feladat l Megoldásötletet az alábbi ábra

Geometriai programozás * Geometriai feladatok programozása * Harmadik feladat l Megoldásötletet az alábbi ábra mutatja: p 8 p 2 p 6=p 11 p 3 p 4 p 5 p 7 p 9 p 10 p 1 P 6 [P 4 P 9 ]P 10 P 1 [P 3 P 7 ]P 5 [P 2 ]P 8 P 11 pp 1, 2010 pp 2, pp 3, pp 4, Szlávi: Geometriai programozás pp 5, pp 6 29