Skip to content

Latest commit

 

History

History
299 lines (271 loc) · 8.97 KB

funktion-paluuarvo.org

File metadata and controls

299 lines (271 loc) · 8.97 KB

Funktion paluuarvo

{{{example}}}

Useat funktiot palauttavat jonkin arvon. Esimerkiksi Processing-kielessä valmiina oleva funktio float min(float a, float b) palauttaa pienemmän luvuista a ja b. Funktion avulla voimme piirtää helposti piirtoikkunaan mahdollisimman suuren ympyrän.

size (600, 400);

// halkaisija on leveydestä ja korkeudesta pienempi
float halkaisija = min (width, height);

ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);

Funktio, joka palauttaa arvon

Funktio

float min (float a, float b)
  

on esimerkki funktiosta, joka palauttaa arvon. Paluuarvon tyyppi näkyy funktion nimen edessä olevasta sanasta. Jos sana on void, paluuarvoa ei ole.

Ohjelman suorituksessa funktiokutsu korvataan paluuarvolla. Esimerkiksi rivillä

float halkaisija = min (width, height);
  

muuttujaan halkaisija sijoitetaan funktiokutsun paluuarvo.

Paluuarvon palauttaminen funktiosta

Funktion paluuarvo palautetaan käyttämällä Processing-kielen varattua sanaa return. Alla on esimerkki funktiosta

float suurempi (float a, float b)

joka palauttaa kahdesta luvusta suuremman. Jos luvut ovat yhtä suuret, on sama kumpi niistä palautetaan.

float suurempi (float a, float b)
{
  if (a > b)
    return (a);
  else
    return (b);
}

void setup ()
{
  size (600, 400);
  noLoop ();
}

void draw ()
{
  float halkaisija = suurempi (width, height);
  ellipse (width / 2.0, height / 2.0, halkaisija, halkaisija);
}

Vastaava funktio max() on olemassa valmiina Processing-kielessä.

{{{example}}}

Alla olevassa esimerkissä määritellään funktio

boolean piirtoikkunassa (int x, int y)

joka palauttaa arvon true täsmälleen silloin, kun piste (x, y) on piirtoikkunan sisällä. Muuten funktio palauttaa arvon false.

boolean piirtoikkunassa (int x, int y)
{
  return (x >= 0 && x < width && y >=0 && y < height);
}

void setup ()
{
  size (400, 400);

  final int HALKAISIJA = 10;
  for (int x = 0, y = 0; 
       piirtoikkunassa (x, y);
       x += HALKAISIJA / 2.0, y += HALKAISIJA)
    ellipse (x, y, HALKAISIJA, HALKAISIJA);
}

void draw ()
{
}

Tehtäviä

  1. Alla oleva funktio palauttaa \(y\)-koordinaatin pisteelle, joka sijaitsee ympyrän kaarella. Pisteen \(x\)-koordinaatti on parametri x ja kaarta vastaavan ympyrän säde on piirtoikkunan leveys.
    float kaariY (float x)
    {
      return (sqrt (sq (width) - sq (x)));
    }
        

    Piirrä funktion avulla alla olevan kaltainen kuva. Voit valita kuvan mitat itse

    <<funktion-paluuarvo-kaariY>>
    
    void setup ()
    {
      size (400, 400);
      
      noLoop ();
    }
    
    void draw ()
    {
      for (float x = 0; x < width; x += 20)
        line (0, 0, x, kaariY (x));
    }
        
  2. Processing-kielen valmis funktio
    float dist (float x1, float y1, float x2, float y2)
        

    palauttaa pisteiden (x1, y1) ja (x2, y2) välisen etäisyyden. (Funktion nimi tulee englannin kielen etäisyyttä tarkoittavasta sanasta distance.) Käytä funktiota alla olevan interaktiivisen ohjelman tekemiseen. Hiiren painallus aiheuttaa ympyrän piirtämisen. Ympyrän kehä kulkee hiiren painalluskohdan kautta, eli ympyrä säde on sama kuin painalluskohdan etäisyys piirtoikkunan keskipisteestä.

    void setup ()
    {
      size (400, 400);
      colorMode (HSB, 100);
      background (0);
    }
    
    void draw ()
    {
    }
    
    void mousePressed ()
    {
      background (0);
    
      // keskipisteen koordinaatit
      float x = width / 2.0, y = height / 2.0;
    
      float halkaisija = 2 * dist (mouseX, mouseY, x, y);
      ellipse (x, y, halkaisija, halkaisija);
    }
        
  3. Kirjoita funktio
    float f (float x)
        

    joka palauttaa arvon x / 2 + 50. Piirrä funktion avulla alla oleva kuva. Kuvassa kunkin pystyviivan päätepisteiden koordinaatit ovat (x, 0) sekä (x, f (x)), ja vierekkäisten pystyviivojen etäisyys \(x\)-akselilla on 10.

    float f (float x)
    {
      return (x / 2 + 50);
    }
    
    void setup ()
    {
      size (600, 400);
      colorMode (HSB, 100);
      noLoop ();
    }
    
    void draw ()
    {
      for (int x = 0; x < width; x += 10)
        line (x, 0, x, f (x));
    }
        
  4. Processing-kielen funktiot
    int hour ()
    int minute ()
    int second ()
        

    palauttavat tämänhetkisen kellonajan tunnit, minuutit ja sekunnit. Tee näiden funktioiden avulla animaatio, joka näyttää kellonajan.

  5. Kirjoita funktion dist () avulla oma funktio
    boolean ympyrassa (float x, float y, float kpX, float kpY, float sade)
        

    joka palauttaa arvon true, jos piste (x, y) on sellaisen ympyrän sisällä, jonka keskipiste on (kpX, kpY) ja säde on sade. Muussa tapauksessa paluuarvo on false. Käytä funktiotasi alla olevan interaktiivisen animaation tekemiseen: ympyrän väri riippuu siitä, onko hiirtä painettu ympyrän sisällä vai sen ulkopuolella.

    boolean ympyrassa (float x, float y, float kpX, float kpY, float sade)
    {
      return (dist (x, y, kpX, kpY) <= sade);
    }
    
    final float HALKAISIJA = 100;
    float kpX, kpY; // ympyrän keskipisteen koordinaatit
    
    void setup ()
    {
      size (600, 400);
      colorMode (HSB, 100);
      fill (100);
      kpX = width / 2.0;
      kpY = height / 2.0;
    }
    
    void draw ()
    {
      ellipse (kpX, kpY, HALKAISIJA, HALKAISIJA);
    }
    
    void mousePressed ()
    {
      if (ympyrassa (mouseX, mouseY, kpX, kpY, HALKAISIJA / 2.0))
        fill (35, 100, 100);
      else
        fill (0, 100, 100);
    }
    
        
  6. Kirjoita funktio
    booolean ympyratLeikkaavat (float x1, float y1, float sade1, float x2, float y2, float sade2)
        

    joka palauttaa arvon true, jos kaksi ympyrää leikkaavat, ja muussa tapauksessa arvon false. Toisen ympyrän keskipiste on (x1, y1) ja säde sade1, ja toisen ympyrän keskipiste (x2, y2) ja säde sade2. Kirjoita funktiosi avulla tällä sivulla näkyvä animaatio. Voit valita animaatiossa olevat mitat vapaasti.

Ratkaisuja

  1. <<funktion-paluuarvo-kaari>>
        
  2. <<funktion-paluuarvo-ympyra>>
        
  3. <<funktion-paluuarvo-f>>
        
  4. void setup ()
    {
      size (600, 400);
      colorMode (HSB, 100);
      background (0);
      fill (100);
      textAlign (CENTER, CENTER);
      textSize (40);
    
      frameRate (1);
    }
    
    void draw ()
    {
      background (0);
      
      final float VALI = width / 6.0; // kellon eri osien välimatka
      final float KORKEUS = height / 2.0;
      text (hour (), VALI, KORKEUS);
      text (":", 2 * VALI, KORKEUS);
      text (minute (), 3 * VALI, KORKEUS);
      text (":", 4 * VALI, KORKEUS);
      text (second (), 5 * VALI, KORKEUS);
    }
        
  5. <<funktion-paluuarvo-ympyrassa>>
        
  6. <<funktion-paluuarvo-ympyrat-leikkaavat>>