sunnuntai 12. heinäkuuta 2015

Racket Turtle (versio 0.5)

Racket Turtle on kehittänyt itselleen kesän aikana uusia taitoja. Nyt kynän paksuutta ja viivan tyyliä voi muutella, taustan värin voi vaihtaa ja Turtlelle voi aktivoida myös "leimasintoiminnon". Lisäksi piirtoalueen kokoa ja piirtonopeutta voi säätää. Turtlea voi ohjata myös kävelemään suoraan tiettyyn koordinaattipisteeseen, Turtlelle voi aktivoida peilaustoiminnon ja origon paikan voi säätää haluamakseen. Ohjeet Racket Turtlen käyttöön löytyy täältä.

Lisäys 16.9.2015:
Racket Turtlen voi nyt asentaa koneelle suoraan Racket Package managerin kautta. Mene DrRacket:in valikkoon File -> Package Manager. Kirjoita Package Source - kenttään: teachpacks ja paina <enter>. Paketti asenttuu automaattisesti profiiliisi (HUOM! ei vaadi asennusoikeuksia). Tämän jälkeen voit käyttää Racket Turtlea seuraavien ohjeiden mukaisesti:

Jokaisen koodiesimerkin (alla) alussa pitää olla nämä määritykset:

(require 2htdp/image)
(require teachpacks/racket-turtle)


1. Taustavärin ja kynän paksuuden muuttaminen sekä kynän värin määrittely vaihtuvaksi.


Näiden kuvien piirtämisessä on käytetty rekursiota, jossa kuljettu matka kasvaa kierros kierrokselta, ensimmäisessä kasvaa myös kynän paksuus. Kynän väriksi on annettu yhden värin asemasta lista värejä, joita Turtle toistaa.

(define VÄRIT (list "red" "blue" "green" "yellow" "purple"))
 

(define (levenevä-spiraali2 p l k kerrat)
  (if (<= kerrat 0)
      empty
      (cons (sivu p l k)

           (levenevä-spiraali2 (+ p 5)
                               (+ l 1) 
                               k 
                               (sub1 kerrat))))))

(define levenevä-spiraali (list (change-bg-color "black")
                                (change-color VÄRIT) 
                                (levenevä-spiraali2 1 1 45 45)))
(draw levenevä-spiraali)


Levenevä kynän paksuus ja toistuvat värit
(define VÄRIT2 (list "red" "green" "yellow" "purple")) 

(define (spiraali k p kerrat)
  (if (< kerrat 0)
      empty
      (append (list (forward p)(turn-left k)) 

              (spiraali k (+ p 2)(sub1 kerrat)))))

(define spiraalikuvio
  (list (change-pen-size 2)
        (change-bg-color "black")
        (change-color VÄRIT2)
        (spiraali 91 1 152)))

(draw spiraalikuvio)


Toistuvilla väreillä saa aikaan näyttäviä kuvioita
Spiraalikuvio WeSchemessä

2. Kynän tilalla on leimasin toiminto, joka piirtää leiman Turtlen sijainnin kohdalle. Leimasimelle voi antaa listan kuvia, jotka se piirtää yksi toisensa jälkeen.


Kuvan kukkalista on tehty rekursiivisesti samoin kuin alemman kuvan tähdet. Värit on saatu random-toiminnolla.

(define (lehti koko väri)  (ellipse (* 8 koko) koko "solid" väri))

(define (lehdet koko väri)
  (overlay (lehti koko väri)
           (rotate 90 (lehti koko väri))))

(define (tee-kukka2 koko väri)
  (overlay (circle (/ koko 2) "solid" "white")
           (lehdet koko väri)
           (rotate 45 (lehdet koko väri))))

(define (kukka-spiraali k p kerrat)
  (if (< kerrat 0)
      empty
      (append (list (forward p)(turn-left k)) 

              (kukka-spiraali k (+ p 6)(sub1 kerrat)))))

(define (tee-kukat määrä koko)
  (if (<= määrä 0)
      empty
      (cons (rotate koko (tee-kukka2 koko 

                                     (make-color (random 255)
                                                 (random 255)
                                                 (random 255))))    
            (tee-kukat (sub1 määrä)(add1 koko)))))
                  
(define kukkaspiraali (list (stamper-on (tee-kukat 20 1))
                            (pen-up)
                            (kukka-spiraali 25 1 20)))

(draw kukkaspiraali)


Kukkaspiraali, jossa random-värisiä kukkia
Kukkaspiraali WeSchemessä

(define (tee-tähdet määrä koko)
  (if (<= määrä 0)
      empty
      (cons (rotate koko 

                   (star koko 
                         "solid" 
                         (make-color (random 255)
                                     (random 255)
                                     (random  255)))) 
            (tee-tähdet (sub1 määrä)(add1 koko)))))       
      

(define tähtispiraali (list (stamper-on (tee-tähdet 100 1))
                            (pen-up)
                            (spiraali 91 1 100)))

(draw tähtispiraali)

Rekursiiviset random-tähdet spiraalissa
Tähtispiraali WeSchemessä.

3. Taustaruudukon piirtäminen, origon sijoittaminen kuvan keskelle, piirtoalueen koon muuttaminen isommaksi, kynän tyylin muuttaminen sekä kuvan piirtämisen koordinaattipisteiden avulla.


Tässä kuvassa punaiset pampulat on tehty leimasimella ja katkoviiva Turtlen kynällä. Taustaruudukon pikkuruutujen kokoa ja väriä voi muuttaa. Kuvan koko on 600x600.

(define koordinaatistokuva
  (list 
(set-origin)
        (set-bg-grid 30 30 "blue")
        (mirror-x-on)
        (mirror-y-on)
        (stamper-on (circle 5 "solid" "red"))
        (change-pen-style "dot")
        (change-pen-size 3)
        (change-color "red")  
        (pen-up)
        (go-to 60 0)
        (pen-down)
        (go-to 120 60)
        (go-to 60 60)
        (go-to 60 120)
        (go-to 0 60)
        (go-to -60 120)
        (go-to -60 60)
        (go-to -120 60)
        (go-to -60 0)))


(draw-custom koordinaatistokuva 600 600 0)


Koordinaatistoharjoitus
Koordinaatistokuva WeSchemessä

4. Peilaustoiminnolla piirtäminen


Tässä on aktivoitu peilaus sekä x-akselin, että y-akselin suunnassa (animaation taustan värin vaihtelu johtuu  GIMP2:sta). Myös kynän paksuutta on muutettu.

(define (tee-kaari väri koko kynä)
  (list (change-color väri)
        (change-pen-size kynä)
        (repeat (round (* (/ 90 koko))) 

                       (list (forward koko) (turn-left koko)))))

(define (tee-lehti väri koko kynä)
  (list (tee-kaari väri koko kynä)
        (turn-left 90)
        (tee-kaari väri koko kynä)))

(define (tee-kukka väri koko kynä)
  (list (mirror-x-on)
        (mirror-y-on)
        (repeat 2 (tee-lehti väri koko kynä))))
 

(define peilauskukka (list (tee-kukka "red" 3 5)
                           (turn-left 45)
                           (tee-kukka "pink" 3 2)))

(draw-and-store peilauskukka)


Turtle peilaustoiminnolla
 Peilauskukka WeSchemessä.

5. Kuvion tallentaminen gif-animaationa


Turtlen piirtämän kuvion voi tallentaa myös animoituna gif:inä. Toiminto on tuskallisen hidas eikä aina edes toimi kunnolla pitkien animaatioiden kanssa. Tässä kuitenkin onnistunut spiraalikukka-animaatio.

(define (tee-kukat2 määrä koko väri)
  (if (<= määrä 0)
      empty
      (cons (rotate koko (tee-kukka2 koko väri))

            (tee-kukat2 (sub1 määrä)(add1 koko) väri))))

(define multi-kukka-spiraali
  (list
   (change-bg-color "black")
   (set-origin)
   (pen-up)
        (stamper-on (tee-kukat2 50 1 "yellow"))
        (kukka-spiraali 25 1 15)
        (turn-left 90)
        (stamper-on (tee-kukat2 50 1 "blue"))
        (go-to 0 0)
        (kukka-spiraali 25 1 15)
        (turn-left 120)
        (stamper-on (tee-kukat2 50 1 "red"))
        (go-to 0 0)
        (kukka-spiraali 25 1 15)))


(draw-and-store multi-kukka-spiraali)

Spiraalikukka-animaatio

6. Taustakuvan asettaminen


Voit myös asettaa animaation taustaksi minkä tahansa kuvan. Taustakuvaksi voi asettaa myös aikaisemmin Turtlella piirretyn kuvan.

(define taustakuva (draw koordinaatisto-kuva))

(define kukkaspiraali-koordinaatistossa
  (list
   (set-bg-image taustakuva)
   (set-origin)
   (pen-up)
        (stamper-on (tee-kukat2 50 1 "red"))
        (go-to 0 0)
        (kukka-spiraali 25 1 15)))

(draw kukkaspiraali-koordinaatistossa)

Taustakuvan asettaminen Racket Turtlelle
Kukkaspiraali-koordinaatistossa WeSchemessä

Racket Turtle toimii myös WeScheme-palvelussa. WeSchemen rajoitusten takia kynän paksuutta tai sen tyyliä ei voi muuttaa eikä animaatioita tallentaa animoituina gif:einä. Muut toiminnot toimivat vastaavalla tavalla.