Yhdenmuotoisuus

Yhdenmuotoisuus



Tällä simulaatiolla voi piirtää yhdenmuotoisia kuvioita siten, että muuttaa mittakaavaa liukupalkeilla. Sinisellä värillä näytetään alkuperäinen kuvio ja punaisella värillä näytetään mittakaavan mukaan joko suurennettu tai pienennetty kuvio. Ohjelman koodi on seuraava. Kopioi tämä koodi kokonaisuudessaan ohjelmointiympäristöön ja suorita koodi. Sinun ei tarvitse tehdä koodiin mitään muutoksia.

// Ohjelman tehnyt e-Oppi Oy
// 19.3.2018
float a = 100; 
float b = 100; 
boolean tyhjenna = false; 
void setup () {
        size(600,750); // ikkunan koko   
        background(255); // Tyhjennä tausta     
        fill(255);
        noStroke();
        // rect(0,150,600,600);
        stroke(200);
        strokeWeight(2);
        for (int z = 0; z < 21; z++) {
           line(z*30,150,z*30,750); 
           line(0,150+z*30,600,150+z*30); 
        }
        strokeWeight(3);
        stroke(0);
        line(300,150,300,750);
        line(0,450,600,450);
        fill(0);
        triangle(590,440,598,450,590,460);
        triangle(300,150,310,160,290,160);
        text("x",580,430);
        text("y",315,170);
        textSize(20);
}

void draw() {
     stroke(0); // Musta viivan väri
     strokeWeight(3);
     textSize(20);
 
     int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
     int y1 = mouseY;
     if (mousePressed == true) {
     if ((y1 > 0) && (y1 < 40)) {
     if ((x1>a) && (a < 550)) { // Jos hiiri on oikealla puolen
         a++; // niin kasvata laskuria
     }
     if ((x1<a) && (x1 > 0)) { // Jos hiiri on vasemmalla puolen
         a--; // niin pienennä laskuria
     }
     }
     if ((y1 > 40) && (y1 < 80)) {
     if ((x1>b) && (b < 550)) { // Jos hiiri on oikealla puolen
         b++; // niin kasvata laskuria
     }
     if ((x1<b) && (x1 > 0)) { // Jos hiiri on vasemmalla puolen
         b--; // niin pienennä laskuria
     }
     }
     if ((y1 > 90) && (y1 < 130)) {
      if ((x1>400) && (x1 < 550)) { // Jos hiiri on oikealla puolen
         tyhjenna = true;
      }
     } 
     }
     fill(0); // Musta tekstin väri
     int a2 = round(map(a,0,550,1,9));  
     int b2 = round(map(b,0,550,1,9));  
      if ( tyhjenna == true) {
        background(255);
        fill(255);
        noStroke();
        // rect(0,150,600,600);
        stroke(200);
        strokeWeight(2);
        for (int z = 0; z < 21; z++) {
           line(z*30,150,z*30,750); 
           line(0,150+z*30,600,150+z*30); 
        }
        strokeWeight(3);
        stroke(0);
        line(300,150,300,750);
        line(0,450,600,450);
        fill(0);
        triangle(590,440,598,450,590,460);
        triangle(300,150,310,160,290,160);
        text("x",580,430);
        text("y",315,170);
        textSize(20);
       
        tyhjenna = false;
      }
        pushMatrix();
        translate(300,450);
        strokeWeight(5);
        if (mousePressed == true) {
            if ((y1 > 150) && (y1 < 750)) {
              if ((x1>0) && (x1 < 600)) { // Jos hiiri on oikealla puolen
                   stroke(0,0,255);
                   line(mouseX-300,mouseY-450,pmouseX-300,pmouseY-450);
                   scale((a2*10.0)/(b2*10.0));
                   stroke(255,0,0);
                   line(mouseX-300,mouseY-450,pmouseX-300,pmouseY-450);
              }
            }
        }         
        popMatrix();
        fill(0);
        noStroke();
        fill(255);
        rect(0,0,600,149);
        stroke(0); // Musta viivan väri
        strokeWeight(3);
        fill(255,255,0); // Keltainen täyttöväri
        rect(0,0,600,40); // Piirrä keltainen suorakulmio  
        rect(0,40,600,40); // Piirrä keltainen suorakulmio  
        fill(255,100,100); // Punainen täyttöväri
        rect(a,0,50,40); // Piirrä punainen neliö
        rect(b,40,50,40); // Piirrä punainen neliö
        rect(400,90,150,40,30); 
        textSize(20);
        fill(0);
        textSize(20);
        text(a2,a+4,35);
        text(b2,b+4,75);
        text(a2+":"+b2,10,120);
        text("Tyhjennä",420,120);          
}