Monomien kertolasku

Monomien kertolasku



Tämä simulaatio havainnollistaa monomien kertolaskua. 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
// 21.3.2018
int a = 450; // Laskurin alkuarvo (ikkunan keskellä)
int b = 150; // Laskurin alkuarvo (ikkunan keskellä)
int c = 450; // Laskurin alkuarvo (ikkunan keskellä)
int d = 150; // Laskurin alkuarvo (ikkunan keskellä)

void setup () {
 size(850,750); // ikkunan koko
}

void draw() {
 background(255); // Tyhjennä tausta
 stroke(0); // Musta viivan väri
 strokeWeight(2);
 textSize(30);
 fill(255,255,0); // Keltainen täyttöväri
 rect(0,0,849,40); // Piirrä keltainen suorakulmio
 rect(0,40,849,40); // Piirrä keltainen suorakulmio
 rect(0,80,849,40); // Piirrä keltainen suorakulmio
 rect(0,120,849,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(c,80,50,40); // Piirrä punainen neliö
 rect(d,120,50,40); // Piirrä punainen neliö
 stroke(0);
 int x1 = mouseX; // Selvitä hiiren vaakakoordinaatti
 int y1 = mouseY;
 if (mousePressed == true) {
 if ((y1 > 0) && (y1 < 40)) {
 if ((x1>a) && (a < 800)) { // Jos hiiri on oikealla puolen
 a++; // niin kasvata laskuria
 }

 if ((x1<a) && (a > 0)) { // Jos hiiri on vasemmalla puolen
 a--; // niin pienennä laskuria
 }
 }
 
 if ((y1 > 40) && (y1 < 80)) {
 if ((x1>b) && (b < 800)) { // Jos hiiri on oikealla puolen
 b++; // niin kasvata laskuria
 }

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

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

 if ((x1<d) && (d > 0)) { // Jos hiiri on vasemmalla puolen
 d--; // niin pienennä laskuria
 }
 }
 }

 fill(0); // Musta tekstin väri
 strokeWeight(2);
 int a2 = round((map(a,0,800,-9,9)));
 int b2 = round((map(b,0,800,1,9)));
 int c2 = round((map(c,0,800,-9,9)));
 int d2 = round((map(d,0,800,1,9)));
 
 text(""+a2,a+4,33);
 text(""+b2,b+4,73);
 text(""+c2,c+4,113);
 text(""+d2,d+4,153);
 if (a2 >= 0) {
  text(a2+"x",10,210);
  text(b2,43,190);
 } else {
  text(a2+"x",10,210);
  text(b2,63,190);
 }
 if (c2 >= 0) {
  int dx = 0;
  if (a2 < 0) {dx = 20; } 
  text("\u00B7 "+c2+"x",80,210);
  text(d2,135,190);
  text(" = "+a2+"\u00B7"+c2+"\u00B7x",190,210);
  text(b2+"+"+d2,305+dx,190);
  
 } else {
  int dx = 0;
  if (a2 < 0) {dx = 20; }
  text("\u00B7 ("+c2+"x  )",80,210);
  text(d2,165,190);
  text(" = "+a2+"\u00B7 ("+c2+")\u00B7x",190,210);
  text(b2+"+"+d2,350+dx,190);
 }
 text("= "+(a2*c2)+"x",440,210);
 int dz = 0;
 if (abs(a2*c2) > 9) { dz = dz + 20; }
 if ((a2 != 0) && (d2 != 0)) {
   if ((a2 < 0) && ( c2 != 0)) { dz = dz + 20; }
   if ((c2 < 0) && ( a2 != 0)) { dz = dz + 20; }
   if ((a2 < 0) && (c2 < 0)) { dz = dz - 40; }
 }
 text((b2+d2),510+dz,190);
 if (a2*c2 ==0) { text(" = 0",540,210); }
 fill(100,100,255,50);
 rect(100,300,430,430);
 fill(0,0,255);
 stroke(0);
 strokeWeight(2);

 for (int t=1; t <= abs(a2); t++) {
   monikulmio(3+t*1.5,9,1,b2,30,a2);
 }
 for (int u=1; u <= abs(c2); u++) {
   monikulmio(2,0.5+9+u*1.5,1,d2,30,c2);
 }
 for (int r=1; r <= abs(a2); r++) {
    for (int m=1; m <= abs(c2); m++) {
      monikulmio(3+r*1.5,0.5+9+m*1.5,1,(b2+d2),30,a2*c2);
    }
 }
 }

void monikulmio(float x, float y, float sade, float lukumaara, float alkukulma, int pos) {
     if (lukumaara > 0) {
     if (lukumaara == 4) { alkukulma = 0; }
     if (lukumaara == 5) { alkukulma = 18; }
     if (lukumaara == 7) { alkukulma = 18; }
     if (lukumaara == 8) { alkukulma = 20; }
     if (pos >= 0) {
       fill(255,100,100);
     } else {
       fill(100,100,255);
     }
     float x2 = map(x,-10,10,-300,300);
     float y2 = map(y,-10,10,-300,300);
     if (lukumaara == 1) {
          ellipse(x2,y2,5,5);
     } else {
          float lisays = 360.0/lukumaara;
          float kulma = alkukulma+lisays;
          beginShape();
             for (int s = 0; s<=lukumaara; s++) {
                 float x1 = sade*20.0*cos(radians(kulma));
                 float y1 = sade*20.0*sin(radians(kulma));
                 vertex(x2+x1,y2+y1);
                 kulma = kulma+lisays;
             }
          endShape();
           fill(255);
          textSize(15);
          if (lukumaara > 2) {
           int sd = 0;
           if ((lukumaara) > 9) { sd = 5; }
           text(round(lukumaara),x2-5-sd,y2+5);
          }
          }
     }
}