Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla (Opettajan ohje)

Samankaltaiset tiedostot
Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Opettajan ohje: Tehtäväluettelo:

14 Monikulmiot 1. Nimeä monikulmio. a) b) c) Laske monikulmion piiri. a) 30,8 cm 18,2 cm. Laske sivun x pituus, kun monikulmion piiri on 25,0 cm.

Ensikosketus ohjelmointiin

Ohjelmakoodia kannattaa aina välillä testata sitä luodessa. Muista tallentaa työsi, vaikka se jäisi keskeneräiseksi!

Python-ohjelmointi Harjoitus 5

Tasogeometriaa GeoGebran piirtoalue ja työvälineet

TYÖPAJA 1: Tasogeometriaa GeoGebran piirtoalue ja työvälineet

Matematiikan ilmiöiden tutkiminen GeoGebran avulla

Vektoreita GeoGebrassa.

Oppimateriaali oppilaalle ja opettajalle : GeoGebra oppilaan työkaluna ylioppilaskirjoituksissa 2016 versio 0.8

Vektorit Opiskelijan ohjeet

GeoGebra-harjoituksia malu-opettajille

Yleistä vektoreista GeoGebralla

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Racket ohjelmointia II. Tiina Partanen 2015

7. Kuvien lisääminen piirtoalueelle

Trigonometriaa ja solve-komento GeoGebralla

2 Pistejoukko koordinaatistossa

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 5: Python

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Tekijä Pitkä matematiikka

Ohjelmoinnin perusteet Y Python

TYÖPAJA 1: Tasogeometriaa GeoGebran piirtoalue ja työvälineet

Symmetrioiden tutkiminen GeoGebran avulla

origo III neljännes D

Ohjelmoinnin perusteet Y Python

OHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE

Scratch ohjeita. Perusteet

6. Harjoitusjakso II. Vinkkejä ja ohjeita

Tutoriaaliläsnäoloista

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

Python-ohjelmointi Harjoitus 2

Hannu Mäkiö. kertolasku * jakolasku / potenssiin korotus ^ Syöte Geogebran vastaus

Pituus- ja pinta-alayksiköt. m dm cm mm. km hm dam m. a) neljän pienen kohteen pituus millimetreiksi, senttimetreiksi ja desimetreiksi

Ohjelmoinnin perusteet Y Python

Opetusmateriaali. Tarvittavat välineet: KUVA 1. Rullakko 1. KUVA 2. Rullakko 2, jossa kiekoissa on kuhmu

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

Tuen tarpeen tunnistaminen

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Ohjelmoinnin perusteet Y Python

Luento 2: Viivan toteutus

ITKP102 Ohjelmointi 1 (6 op)

GeoGebran 3D paketti

MATEMATIIKKA JA TAIDE I

4.1 Kaksi pistettä määrää suoran

Ohjelmoinnin peruskurssi Y1

Tuen tarpeen tunnistaminen

Ohjelmoinnin perusteet Y Python

Tämä luku nojaa vahvasti esimerkkeihin. Aloitetaan palauttamalla mieleen, mitä koordinaatistolla tarkoitetaan.

Geogebra -koulutus. Ohjelmistojen pedagoginen hyödyntäminen

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

Yhtälön oikealla puolella on säteen neliö, joten r. = 5 eli r = ± 5. Koska säde on positiivinen, niin r = 5.

ITKP102 Ohjelmointi 1 (6 op)

GeoGebra. ohjeita ja tehtäviä 2. Pohdin projekti 1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Harjoitus 4 -- Ratkaisut

9. Harjoitusjakso III

9. Vektorit. 9.1 Skalaarit ja vektorit. 9.2 Vektorit tasossa

y=-3x+2 y=2x-3 y=3x+2 x = = 6

7. Resistanssi ja Ohmin laki

yleisessä muodossa x y ax by c 0. 6p

2016/07/05 08:58 1/12 Shortcut Menut

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

FUNKTION KUVAAJAN PIIRTÄMINEN

Ohjelmoinnin peruskurssi Y1

Muistutus aikatauluista

Ohjelmoinnin peruskurssi Y1

z 1+i (a) f (z) = 3z 4 5z 3 + 2z (b) f (z) = z 4z + 1 f (z) = 12z 3 15z 2 + 2

Tietorakenteet (syksy 2013)

Ohjelmoinnin perusteet Y Python

Tuen tarpeen tunnistaminen. Lukemisen ja kirjoittamisen ryhmäarviointi. Esitysohjeet opettajalle. toinen luokka syksy

Aloita Ratkaise Pisteytä se itse Merkitse pisteet saanut riittävästi pisteitä voit siirtyä seuraavaan osioon ei ole riittävästi

3. Harjoitusjakso I. Vinkkejä ja ohjeita

Ohjelmoinnin peruskurssi Y1

Zeon PDF Driver Trial

Kuvien kanssa työskentely GeoGebrassa

Googlen pilvipalvelut tutuksi / Google Drive

MAB3 - Harjoitustehtävien ratkaisut:

Osoita, että kaikki paraabelit ovat yhdenmuotoisia etsimällä skaalauskuvaus, joka vie paraabelin y = ax 2 paraabelille y = bx 2. VASTAUS: , b = 2 2

Venekilpailu! Esteiden väistely ja hahmon ohjaaminen

Mb8 Koe Kuopion Lyseon lukio (KK) sivu 1/2

Ohjelmoinnin perusteet Y Python

Tuen tarpeen tunnistaminen

BM20A5800 Funktiot, lineaarialgebra ja vektorit Harjoitus 4, Syksy 2016

3. Piirrä kaksi tasoa siten, että ne jakavat avaruuden neljään osaan.

Peilatun kuvion ominaisuudet

Kolmion kulmien summa. Maria Sukura

Ohjelmoinnin peruskurssi Y1

Ohjeita LINDOn ja LINGOn käyttöön

Transkriptio:

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla (Opettajan ohje) TAVOITTEET Tämän kokonaisuuden tavoitteena on tutustuttaa oppilaat Pythonilla ohjelmointiin ja erityisesti Turtle moduulin käyttöön koodauksessa. Näissä harjoituksissa Pythonilla ohjelmointia lähestytään aikaisemmilla matematiikan oppitunneilla käsitellyn pisteen ja suoran suhteen peilaamisen avulla. Tehtävät voi tehdä joko opettajajohtoisesti niin, että oppilaat tekevät opettajan perässä tehtävät tai jakaa oppilaille liitteenä olevan ohjeistuksen itsenäistä työskentelyä varten. Tehtävät on myös suunniteltu muokattaviksi. Opettaja voi halutessaan valita mitä tehtäviä tehdään ja millä tavalla tehtäviä lähestytään. Tehtävänantoja muokkaamalla opettaja voi myös hyvin käyttää materiaalia eriyttämiseen; kokeneemmille ohjelmoijille opettaja voi tarjota avoimempia tehtävänantoja, siinä missä aloittelijan kanssa voidaan käsitellä tehtäviä perusteellisemman ohjeistuksen/tehtävänannon kautta. Ennen kuin ryhdytään opiskelemaan Pythonilla koodaamista, oppilaiden olisi hyvä tarvittaessa palauttaa mieleen pisteen ja suoran suhteen peilaaminen koordinaatistossa kynän ja paperin avulla. Pythonin Turtle moduulilla piirtämisessä on käytössä koordinaatisto, jota hyödynnetään ohjelmoinnissa. Ohjelmoinnin toteuttaminen alussa kynän ja paperin avulla voi auttaa oppilaita ymmärtämään mihin tuleva ohjelmointi perustuu syvällisemmällä tasolla. Tässä dokumentissa annettujen kynä-paperiharjoitusten lisäksi opettaja voi halutessaan pyytää oppilaita tekemään lisäharjoituksena parityön, jonka aikana oppilaat ohjeistavat toisiaan piirtämään monikulmioita ja niiden peilikuvia vaihe vaiheelta koordinaatistoon. Tällaisen ei-tietokoneavusteisen ouhelmointi harjoituksen tavoitteena olisi auttaa ja valmistaa oppilaita tuleviin koodausharjoituksiin, ohjelmointiin ja algoritmiseen ajatteluun. Alkuharjoituksen jälkeen aloitetaan ohjelmoinnin opiskelu Python-ohjelmointikielellä. Tämän harjoituksen aikana Pythonista tulee tutuksi muuttujien käyttö, toistorakenne sekä funktiot ja niiden käyttö sekä turtle moodulilla piirtäminen. Näihin toimintoihin tutustutaan piirtämällä monikulmioita, merkitsemällä peilauspisteitä ja luomalla pisteen ja suoran suhteen peilaavia koodeja. Tehtävät voi tehdä esimerkiksi trinket.io verkkosivuston Python-alustalla. ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa Nämä tehtävät voi teettää oppilailla, mikäli heillä on tarvetta kertaukselle peilauksesta. a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva

- neliö, jonka kärkipisteet ovat (1,1), (1,5), (5,5) ja (5,1) - suorakulmainen kolmio, jonka kärkipisteet ovat (-1,1), (-5,1) ja (-5,5). b) Peilaa y-akselin ja x-akselin suhteen koordinaatistossa sijaitseva - neliö, jonka kärkipisteet ovat (1,1), (1,5), (5,5) ja (5,1). - suorakulmainen kolmio, jonka kärkipisteet ovat (-1,1), (-5,1) ja (-5,5). c) Parityö: annetaan oppilaille eri monikulmioita koordinaatistossa. Oppilaiden tulee ohjeistaa toisiaan piirtämään monikulmiot koordinaatistoon. He voivat myös kokeilla ohjeistaa paria peilaamaan kuvion, jonkin pisteen tai suoran suhteen. Tässä tehtävässä oppilaiden tulee välttää laajoja ilmaisuja, kuten: piirrä monikulmio, jonka kärkipisteet ovat, vaan oppilaiden tulee tarkemmin ohjeistaa toisiaan, kuten: mene pisteeseen..., käänny oikealle astetta jne. OHJELMOINTI PYTHONILLA Aloitetaan Python-ohjelman käyttö Turtle-moduulin lisäämisellä. Jotta saadaan Turtle moduuli käyttöön, täytyy se tuoda ohjelmalle kirjoittamalla alkuun komento: import turtle Seuraavaksi luodaan konna niminen turtle muuttuja, jota liikuttamalla kuvioita voidaan piirtää: konna = turtle.turtle() konna.shape("turtle") Tässä konnaa käytetään aina, kun halutaan piirtää kyseisellä objektilla. Shape komento antaa konnalle näkyvän kilpikonnamaisen muodon. Turtlella piirtäminen Tässä osassa harjoitellaan säännöllisten monikulmioiden piirtämistä Pythonilla. Säännöllisen monikulmion piirtämisessä Pythonilla keskeistä on aloituspiste (x,y), sivun pituus sekä kulman suuruus. Pythonissa kukin komento tulee kirjoittaa omalle rivilleen ja ohjelma käy komentoja läpi rivi riviltä. Harjoituksissa konnalle riittää käytettäväksi seuraavat komennot: konna.forward(pituus) liikuttaa konnaa eteenpäin annetun pituuden verran konna.left(kulma) kääntää konnaa vasemmalle annetun kulman verran konna.right(kulma) kääntää konnaa oikealle asteina annetun kulman verran konna.setheading(kulma) asettaa konnan osoittamaan kulman suuntaan 0 suunnan osoittaessa oikealle konna.goto(x, y) liikuttaa konnan annettuihin x ja y koordinaatteihin aloittaa piirtämisen

konna.stamp() lopettaa piirtämisen leimaa konnan kuvan koordinaatistoon senhetkiseen sijaintiin Ylläolevissa komennoissa pituus, kulma, x ja y voidaan korvata luvuilla, laskutoimituksilla tai pitää muuttujina, joihin on sijoitettu lukuarvo kuten alla: kulma = 45 x = -100 y = 50 Trinketissä Turtle-moduulin koordinaatiston yksi pikseli ruudulla vastaa yhtä kokonaislukua, joten kannattaa käyttää suurehkoja (20-100) lukuja liikuttaessa, jotta piirrosjälki on havaittavissa. Trinketissä koko piirtoalue on 400 pikseliä (-200 200) leveä ja korkea origon (piste (0, 0)) ollessa keskellä. H1. Monikulmioiden piirtämistä Aloitetaan piirtämällä erilaisia säännölisiä monikulmioita. Ohessa tehtävät sekä kysymyksiä, joita oppilaille voi esittää samalla. a) Tee komentosarja, joka ohjaa konnan piirtämään neliön piirtoalueelle. - Mihin suuntaan konna aloittaa liikkumisen, jossei sitä alussa käännetä? b) Liikuta konna johonkin muuhun kohtaan piirtoaluetta ja ohjaa se piirtämään kolmio. c) Piirrä myös tasasivuinen viisikulmio eri kohtaan piirtoaluetta. - Kuinka tiedät miten paljon konnaa pitää kääntää, jotta saat oikean kuvion piirrettyä? - Mitä hyötyä stamp komennosta voisi olla koodia kirjoittaessa? - Kiinnitä huomiota koodin rakenteeseen ja toistuvuuteen. Mitä huomaat? Ohessa esimerkkiratkaisut tehtäviin. Koodin voi suoraan kopioida. Merkillä # alkavat rivit ovat kommentteja joita Pythonin kääntäjä ei lue osaksi itse koodia. import turtle konna = turtle.turtle() konna.shape("turtle") # a) Piirretään neliö, jonka alkupisteenä on origo (0,0) konna.left(90) konna.left(90)

konna.left(90) # b) Piirretään tasasivuinen kolmio aloittaen kohdasta (100,100). # Käytetään penup() komentoa ennen siirtoa ja # pendown() siirron jälkeen, jottei siirto piirrä viivaa konna.goto(100, 100) konna.right(360/3) konna.right(360/3) # c) Piirretään säännöllinen viisikulmio eri kohtaan konna.goto(100, -100) konna.left(360/5) konna.left(360/5) konna.left(360/5) konna.left(360/5) Huomioitavaa: Tyypillinen virhe saattaa syntyä käännöksen kulman suuruuden määrittämisen kanssa. Huomioitavaa on, ettei kulman käännössuuruus asteissa ole sama kuin säännöllisen monikulmion yhden kulman asteen suuruus. Tätä voi tarvittaessa lähestyä kynä-paperiesimerkin avulla piirtämällä: monikulmion sisäkulma verrattuna käännöskulmaan.) Lisäesimerkkinä tarvittaessa säännöllisen seitsemänkulmion piirtäminen:

Huomataan, että säännöllisten monikulmioiden piirtämisessä forward(pituus)- ja left(kulma)- tai right(kulma)-komennot toistuvat useamman kerran. Komennot toistuvat yhtä monta kertaa kuin kulmia on, mikäli konnan halutaan osoittavan aloitussuuntaan piirron lopussa, kuten ylläolevassa seitsemänkulmiossa. Pythonin avulla tämä toisto voidaan kirjoittaa lyhyemmin toistolla, johon tutustutaan seuraavaksi. Toisto Yksi tapa toistaa komentoja Pythonissa on seuraavanlainen: # Luodaan muuttuja toistojen määrälle, joka vastaa kulmien # määrää harjoituksissa. toistomaara = 4 for i in range(0, toistomaara ): toistettava koodi sisennettynä Tämä toistaa kaksoispisteen jälkeisen sisennetyt koodirivit toistomaara muuttujalle annetun arvon kertoja. Huomaa, että Python koodissa ei kannata käyttää ääkkösiä. H2. Monikulmion piirtäminen toistorakenteella Tehdään puhtaalle alustalle aiempia kuvioita toistorakennetta hyödyntäen: a) Kirjoita toistorakenne, joka piirtää neliön, jonka sivun pituus on 50 mutta sijoita tällä kertaa sivun pituus omaan muuttujaansa. b) Kirjoita toistorakenne, joka piirtää eri kohtaan säännöllisen seitsemänkulmion, jolla on sama sivun pituus kuin aiemmalla neliöllä. - Miten saatiinkaan laskettua käännöksen suuruus eri säännöllisillä monikulmioilla? Esimerkkiratkaisu: import turtle konna = turtle.turtle() konna.shape("turtle") # a) Neliö toistolla toistomaara = 4 # muuttuja kulmien määrälle pituus = 50 # muuttuja sivun pituudelle for i in range(0, toistomaara ): konna.forward( pituus )

konna.left(360/ toistomaara ) # b) Säännöllinen seitsemänkulmio toistolla. # Huomaa, että pituus muuttujaa ei tarvitse asettaa, # jos se on jo aiemmin kirjoitettu ja sillä on haluttu arvo toistomaara = 7 # vaihdetaan toistomäärä kulmien määräksi konna.goto(-100,-100) for i in range(0, toistomaara ): konna.forward( pituus ) konna.left(360/ toistomaara ) Tähän mennessä on opittu tuomaan Pythoniin Turtle-moduuli, piirtämään sillä eri kohtiin säännöllisiä monikulmioita toistorakenteella ja ilman. Seuraavaksi tutustutaan funktio-toimintoon, jonka avulla piirretään säännöllinen monikulmio, jota voidaan kutsua myöhemmin peilatessa. Toistorakenteen tavoin funktion käyttäminen yksinkertaistaa koodia. Funktio Funktiot ovat aliohjelmia, joita voidaan kutsua koodissa suorittamaan toimintonsa annetuilla argumenteilla tai ilman, jos funktio ei niitä hyödynnä. Pythonissa funktioita voidaan luoda seuraavasti : def funktio( argumentti1, argumentti2 ): funktion koodia sisennettynä Esimerkiksi funktio, joka piirtää konnalla halutun pituisen suoran viivan olisi seuraavanlainen: def viiva( pituus ): konna.forward( pituus ) Funktion kutsuminen (eli tässä viivan piirtäminen) ohjelmakoodissa tapahtuu seuraavasti: viiva(100) # Kirjoitetaan funktion nimi ja sulkeisiin haluttu lukuarvo # (tässä tapauksessa viivan pituus). H3. Piirto funktiolla Hyödynnetään aiemmin opittua monikulmioita piirtävän funktion luonnissa.

a) Luo funktio monikulmio( x, y, pituus, kulmia ), joka piirtää säännöllisen monikulmion niin, että sille määrätään argumenteilla monikulmion sijaintia varten aloituskoordinaatit, sivun pituus sekä kulmien määrä. - Mitä tehtiinkään H1:ssä (aloituspisteen siirto) ja H2:ssa (toisto)? - Millä komennolla saadaan siirrettyä konnan minne halutaan koordinaatistossa ennen monikulmion piirtoa? - Stamp komennolla voidaan helpottaa virheiden etsintää ratkaisussa. - Muistetaan nostaa kynä, kun ei haluta piirtää ja laskea ennen piirron aloitusta. b) Testaa funktion toimivuutta kutsumalla sitä komennoilla : monikulmio(-100, -100, 30, 3) monikulmio(-100, 100, 40, 4) monikulmio(100, 100, 50, 5) monikulmio(100, -100, 20, 6) Esimerkkiratkaisu: import turtle konna = turtle.turtle() konna.shape("turtle") def monikulmio( x, y, pituus, kulmia ): # Nostetaan kynä ennen siirtoa konna.goto( x, y ) # Siirrytään kohtaan (x,y) # Lasketaan kynä piirtämistä varten for i in range(0, kulmia ): # H2 toistorakenne konna.forward( pituus ) # Huomaa toinen sisennys konna.left(360/ kulmia ) # Huomaa, ettei funktiota käytettäessä tarvitse toistorakenteen # muuttujia määrittellä ennalta vaan ne annetaan funktiota # kutsuttaessa. Ajetaan testit: monikulmio(-100, -100, 30, 3) monikulmio(-100, 100, 40, 4) monikulmio(100, 100, 50, 5) monikulmio(100, -100, 20, 6) Nyt osataan piirtää erilaisia säännöllisiä monikulmioita eri kohtiin kutsumalla funktiota komennolla: monikulmio( x, y, pituus, kulma ), johon syötämme x:n ja y:n paikalle piirron aloituspisteen koordinaatit, pituuden paikalle halutun sivun pituuden sekä kulmien paikalle kulmien määrän. Siirrytään seuraavaksi peilauksen pariin.

H4. Peilauspisteelle funktio Jatketaan H3:n pohjalta. Luodaan peilauspisteelle oma funktio joka piirtää sen pienenä + merkkinä. Kirjoitetaan se koodiin monikulmion funktion määrittelyn edelle. def peilauspiste( px, py ): konna.goto( px -5, py ) konna.goto( px +5, py ) konna.goto( px, py -5) konna.goto( px, py +5) konna.goto(0,0) # Tämä komento piirtäisi peilauspisteen kohtaan (0,0) peilauspiste(0,0) - Kuinka peilauspisteen funktiota kutsutaan? - Mitä tekevät muuttujat px ja py? - Lue peilauspisteen koodi rivi kerrallaan parillesi mitä kussakin kohdassa on tehty? H5. Peilaus pisteen suhteen Nyt on olemassa funktiot monikulmion piirtämiselle sekä peilauspisteelle, joten voidaan siirtyä peilaukseen pisteen suhteen. Tämän tehtävän viimeinen osio on selvästi haastavampi kuin aiemmat tehtävät. Jatketaan H4:stä ja luodaan apumuuttujat joita tarvitaan myöhemmin peilauksessa ja piirretään peilauspiste origoon funktiolla. Harjoitellaan kuitenkin ensin peilausta ilman monikulmion funktiota: a) Luo seuraavat muuttujat ja anna niille annetut arvot: px = 0, py = 0, x = -100, y = 50, kulmia = 6 ja pituus = 40 b) Piirrä peilauspiste pisteeseen (px,py) sen funktiota käyttäen c) Piirrä neliö, joka kulkee pisteiden (10,10), (10,50), (50,50) ja (50,10) kautta. Piirrä neliölle peilikuva peilauspisteen suhteen. (Huom! Palauta mieleen, kuinka piirsit peilikuvia kynällä ja paperilla. Mistä pisteestä lähdet piirtämään peilikuvaa? Millä komennolla saat pirrettyä viivan kahden pisteen välille?) d) Piirrä suorakulmainen kolmio, jonka kärkipisteet ovat (-10,10), (-50,10) ja (-50,50). Piirrä tälle kolmiolle peilikuva peilauspisteen suhteen. e) Piirrä H3:n funktiota käyttäen säännöllinen monikulmio käyttäen a) kohdassa luotuja muuttujia x, y, kulmia ja pituus. f) Piirrä monikulmion peilikuva peilauspisteen suhteen.

Esimerkkiratkaisu: - Saatko koodisi toimimaan toistorakennetta käyttäen niin, että monikulmio peilautuu minkä tahansa peilauspisteen sijainnin suhteen? - Entä peilautuuko kuvio oikein, jos muutat monikulmion kulmien määrää? import turtle konna = turtle.turtle() konna.shape("turtle") # Täydennä H4:n funktio def peilauspiste( px, py ):.. # Täydennä H3:n funktio def monikulmio( x, y, pituus, kulmia ):.. # a) px = 0 py = 0 x = -100 y = 50 kulmia = 6 pituus = 40 # b) peilauspiste( px, py ) # c) konna.goto(10, 10) konna.goto(10, 50) konna.goto(50, 50) konna.goto(50, 10) konna.goto(10, 10) # c) peilikuva konna.goto(-10,-10) konna.goto(-10, -50) konna.goto(-50, -50) konna.goto(-50, -10) konna.goto(-10, -10) # d) konna.goto(-10,10) konna.goto(-50,10)

konna.goto(-50,50) konna.goto(-10,10) # d) peilikuva konna.goto(10,-10) konna.goto(50,-10) konna.goto(50,-50) konna.goto(10,-10) # e) monikulmio( x, y, pituus, kulmia ) # f) Tämä ratkaisu piirtyy oikein eri # monikulmioilla sekä peilauspisteillä konna.goto( px +( px - x ), py +( py - y )) # Mitä tässä tapahtuu? konna.left(180) # Miksi käännytään? for i in range(0, kulmia ): konna.forward( pituus ) konna.left(360/ kulmia ) H6. Peilaus suoran suhteen Tämä tehtävä on vielä astetta haastavampi kuin edellinen. Aloitetaan uusi trinketti/projekti ja kopioidaan siihen allaoleva koodi. Täydennetään koodin alkuun H3:ssa tehty monikulmioiden piirtämisen funktio. Tämän jälkeen ohjataan konna piirtämään kuvion peilikuva suoran suhteen ohjelmakoodin loppuun. - Kuinka saat peilattua yhden pisteen suoran suhteen? Olisiko jostakin annetusta funktiosta hyötyä? - Saatko piirrettyä kuvion tästä peilatusta pisteestä lähtien? Ota huomioon mihin suuntaan konna osoittaa milloinkin. - Saatko peilauksen toimimaan riippumatta monikulmion kulmien määrästä? - Saatko peilauksen toimimaan riippumatta peilaussuoran kulmasta? Kokeile vaikka 45 ja 0. # tuodaan ohjelman käytettäväksi tarvittavat moduulit import turtle import math # Täydennä tähän H3:ssa tehty monikulmioiden piirtofunktio

def monikulmio( x, y, pituus, kulmia ): # tämä funktio piirtää origon (0, 0) kautta kulkevan suoran, # joka on argumenttina annetussa kulmassa vaakatasoon nähden def peilaussuora( kulma ): konna.goto(0, 0) konna.left( kulma ) konna.forward(200) konna.left(180) konna.forward(400) konna.goto(0, 0) konna.setheading(0) # tällä funktiolla voidaan laskea annetuissa x ja y # koordinaateissa olevan pisteen etäisyys peilaussuorasta def pisteenetaisyyssuorasta( x, y, kulma ): k = math.tan( kulma /180*math.pi) return abs( y -k* x )/math.sqrt(1+ k * k ) # Pääohjelma alkaa tässä ja siinä piirretään tehtävänanto # halutuilla arvoilla. konna = turtle.turtle() konna.shape("turtle") kulma = 90 # peilaussuoran kulma (0-90 astetta) x = -100 # monikulmion kulman x koordinaatti y = 50 # monikulmion kulman y koordinaatti kulmia = 4 # monikulmion kulmien määrä pituus = 40 # monikulmion sivun pituus peilaussuora( kulma ) monikulmio( x, y, pituus, kulmia ) konna.goto(0, 0) # viedään konna alkupisteeseen ja konna.setheading(0) # käännetään alkusuuntaan # Kirjoita alle koodisi, jolla saat konnan piirtämään # monikulmion peilikuvan peilaussuoran suhteen. # Toimiiko ratkaisusi eri monikulmioilla sekä peilaussuorilla? # Stamp komennolla voit helpommin etsiä virheitä # omassa ratkaisussasi. Esimerkkiratkaisu (toimii kun peilaussuora on välillä 0 90 astetta): konna.goto( x, y ) konna.right(90- kulma ) konna.forward(2*pisteenetaisyyssuorasta( x, y, kulma )) konna.right(90- kulma ) konna.right(180) for i in range(0, kulmia ): konna.forward( pituus )

konna.right(360/ kulmia ) konna.hideturtle() Ratkaisussa mennään ensin monikulmion piirron aloituspisteeseen (x, y), käännytään kohti peilaussuoraa ja liikutaan kaksi kertaa pisteen etäisyyden verran suoraa päin, jolloin päädytään peilauspisteeseen (rivit 1-3). Sitten tehdään korjauskäännöksiä (4-5), jotta konna osoittaa oikeaan suuntaan toistolla tehtävää monikulmion piirtoa varten (6-9).