Paraabeli

Paraabeli



Tämä simulaatio piirtää paraabelin eli yhtälön y = ax+ bx + c kuvaajan. Ohjelman koodi on alla. Kopioi tämä koodi kokonaisuudessaan ohjelmointiympäristöön ja suorita koodi. Sinun ei tarvitse tehdä koodiin mitään muutoksia.

// Ohjelman tehnyt e-Oppi Oy
// 18.3.2018
float a = 329; // Laskurin alkuarvo (ikkunan keskellä)
float b = 275; // Laskurin alkuarvo (ikkunan keskellä)
float c = 275; // Laskurin alkuarvo (ikkunan keskellä)
float d = 303; // Laskurin alkuarvo (ikkunan keskellä)
void setup () {
     size(600,750); // ikkunan koko   
}

void draw() {
     background(255); // Tyhjennä tausta
     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 < 30)) {
     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 > 30) && (y1 < 60)) {
     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 > 60) && (y1 < 90)) {
      if ((x1>c) && (c < 550)) { // Jos hiiri on oikealla puolen
         c++; // niin kasvata laskuria
      }

      if ((x1<c) && (x1 >= 0)) { // Jos hiiri on vasemmalla puolen
         c--; // niin pienennä laskuria
      }
     }
     if ((y1 > 90) && (y1 < 120)) {
      if ((x1>d) && (d < 550)) { // Jos hiiri on oikealla puolen
         d++; // niin kasvata laskuria
      }

      if ((x1<d) && (x1 >=0)) { // Jos hiiri on vasemmalla puolen
         d--; // niin pienennä laskuria
      }
     }
      
     }
     fill(0); // Musta tekstin väri
     float a2 = round(10*map(a,0,550,-5,5))/10.0;
     float b2 = round(10*map(b,0,550,-5,5))/10.0;
     float c2 = round(10*map(c,0,550,-5,5))/10.0;
     float d2 = round(10*map(d,0,550,-10,10))/10.0;
     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);
      text("1",323,470);
      text("1",280,430);
      pushMatrix();
      translate(300,450);
      scale(1,-1);
      paraabelit(a2,b2,c2,d2);
      popMatrix();
      fill(0);
      noStroke();
      fill(255);
      rect(0,0,600,148);
      stroke(0); // Musta viivan väri
      strokeWeight(3);
      fill(255,255,0); // Keltainen täyttöväri
      rect(0,0,849,30); // Piirrä keltainen suorakulmio
      rect(0,30,849,30); // Piirrä keltainen suorakulmio
      rect(0,60,849,30); // Piirrä keltainen suorakulmio
      rect(0,90,849,30); // Piirrä keltainen suorakulmio
           
      fill(255,100,100); // Punainen täyttöväri
      rect(a,0,50,30); // Piirrä punainen neliö
      rect(b,30,50,30); // Piirrä punainen neliö
      rect(c,60,50,30); // Piirrä punainen neliö
      rect(d,90,50,30); // Piirrä punainen neliö
      textSize(20);
      fill(0);
      textSize(20);
      text(""+a2,a+4,25);   
      text(""+b2,b+4,55);
      text(""+c2,c+4,85);   
      text(""+d2,d+4,115);
      if ((a2 != 0) && (b2 !=0) && (c2 != 0)) {
        if ((b2 >= 0) && (c2 >= 0)) {
         text("y="+a2+"x\u00B2+"+b2+"x+"+c2,10,145);
        }
        if ((b2 < 0) && (c2 >= 0)) {
         text("y="+a2+"x\u00B2"+b2+"x+"+c2,10,145);
        }
        if ((b2 >= 0) && (c2 < 0)) {
         text("y="+a2+"x\u00B2+"+b2+"x"+c2,10,145);
        }
        if ((b2 < 0) && (c2 < 0)) {
         text("y="+a2+"x\u00B2"+b2+"x"+c2,10,145);
        }
      }
      if ((a2 == 0) && (b2 != 0) && (c2 != 0)) {
        if (c2 >= 0) {
         text("y="+b2+"x+"+c2,10,145);
        }
        if (c2 < 0) {
         text("y="+b2+"x"+c2,10,145);
        }
      }
      if ((a2 != 0) && (b2 == 0) && (c2 != 0)) {
        if (c2 >= 0) {
         text("y="+a2+"x\u00B2+"+c2,10,145);
        }
        if (c2 < 0) {
         text("y="+a2+"x\u00B2"+c2,10,145);
        }
      }
      if ((a2 != 0) && (b2 != 0) && (c2 == 0)) {
        if (b2 >= 0) {
         text("y="+a2+"x\u00B2+"+b2+"x",10,145);
        }
        if (b2 < 0) {
         text("y="+a2+"x\u00B2"+b2+"x",10,145);
        }
      }
      if ((a2 == 0) && (b2 == 0) && (c2 != 0)) {
        text("y="+c2,10,145);
      }
      if ((a2 == 0) && (b2 != 0) && (c2 == 0)) {
         text("y="+b2+"x",10,145);
      }
      if ((a2 == 0) && (b2 ==0) && (c2 == 0)) {
        text("y=0",10,145);
      }
       if ((a2 != 0) && (b2 ==0) && (c2 == 0)) {
        text("y="+a2+"x\u00B2",10,145);
      }
      float y3 =(a2*d2*d2+b2*d2+c2);
      text("f("+d2+") = "+nfc(y3,1),310,145);
}
void paraabelit(float ua, float ub, float uc, float ud) {
     float s1 = -301;
     float y1 =(ua*((s1/30.0)*(s1/30.0))+ub*(s1/30.0)+uc);
     float s2 = -301;
     float y2 =(ua*((s2/30.0)*(s2/30.0))+ub*(s2/30.0)+uc);
     for (int s=-300; s<300; s++) {
          stroke(0,0,255);
          strokeWeight(3);
          y1 =(ua*((s/30.0)*(s/30.0))+ub*(s/30.0)+uc);
          s1 = s;
          // ellipse((s1),y1*30,1,1);
          line(s1,y1*30,s2,y2*30);
          y2 =(ua*((s/30.0)*(s/30.0))+ub*(s/30.0)+uc);
          s2 = s;
          stroke(255,0,0);
          strokeWeight(2);
          float y3 =(ua*ud*ud+ub*ud+uc);
          line(ud*30,0,ud*30,y3*30);
          line(ud*30,y3*30,0,y3*30);
     }
}