Monikulmion piiri ja pinta-ala
Monikulmion piiri ja pinta-ala

Tämä simulaatio piirtää erilaisia monikulmioita, kuten suorakulmio, suunnikas, puolisuunnikas, kolmio ja säännöllinen monikulmio. Lisäksi ohjelma laskee kuvion piirin ja pinta-alan. 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
// 11.3.2018
float a = 100; // Laskurin alkuarvo (ikkunan keskellä)
float b = 100; // Laskurin alkuarvo (ikkunan keskellä)
float c = 100; // Laskurin alkuarvo (ikkunan keskellä)
float d = 100; // Laskurin alkuarvo (ikkunan keskellä)
float e = 0;
float f = 400;
float g = 400;
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;
int e2 = round(map(e,0,450,0,5));
if (mousePressed == true) {
if ((y1 > 0) && (y1 < 30)) {
if (e2 == 0) {
if ((x1>a) && (a < 550)) { // Jos hiiri on oikealla puolen
a++; // niin kasvata laskuria
}
}
if ((e2 == 1) || (e2 == 2) || (e2 == 3) || (e2 == 4) || (e2 == 5)){
if ((x1>a) && (a < 250) && (x1 < 300)) { // 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 ((e2 == 0) || (e2 == 1) || (e2 == 3) || (e2 == 4) || (e2 == 5)) {
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 (e2 == 2) {
if ((x1>b) && (b < 250) && (x1 < 300)) { // 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
}
}
if ((y1 > 120) && (y1 < 150)) {
if ((x1>e) && (e < 450)) { // Jos hiiri on oikealla puolen
e++; // niin kasvata laskuria
}
if ((x1<e) && (x1 >0)) { // Jos hiiri on vasemmalla puolen
e--; // niin pienennä laskuria
}
}
if ((y1 > 120) && (y1 < 150)) {
if ((x1>e) && (e < 450)) { // Jos hiiri on oikealla puolen
e++; // niin kasvata laskuria
}
if ((x1<e) && (x1 >0)) { // Jos hiiri on vasemmalla puolen
e--; // niin pienennä laskuria
}
}
if ((y1 > 0) && (y1 < 30)) {
if ((x1>f) && (f < 550)) { // Jos hiiri on oikealla puolen
f++; // niin kasvata laskuria
}
if ((x1<f) && (x1 > 300)) { // Jos hiiri on vasemmalla puolen
f--; // niin pienennä laskuria
}
}
if ((y1 > 30) && (y1 < 60)) {
if ((x1>g) && (g < 550)) { // Jos hiiri on oikealla puolen
g++; // niin kasvata laskuria
}
if ((x1<g) && (x1 > 300)) { // Jos hiiri on vasemmalla puolen
g--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
int a2 = 1;
int b2 = 1;
int c2 = 1;
int d2 = 1;
int f2 = 1;
int g2 = 1;
if (e2 == 0) {
a2 = round(map(a,0,550,-10,10));
b2 = round(map(b,0,550,-10,10));
c2 = round(map(c,0,550,1,20));
d2 = round(map(d,0,550,1,20));
}
if (e2 == 1) {
a2 = round(map(a,0,250,-10,10));
f2 = round(map(f,300,550,-10,10));
b2 = round(map(b,0,550,1,20));
c2 = round(map(c,0,550,1,20));
d2 = round(map(d,0,550,0,180));
}
if (e2 == 2) {
a2 = round(map(a,0,250,-10,10));
f2 = round(map(f,300,550,-10,10));
b2 = round(map(b,0,250,1,20));
g2 = round(map(g,300,550,1,20));
c2 = round(map(c,0,550,1,20));
d2 = round(map(d,0,550,-10,10));
}
if (e2 == 3) {
a2 = round(map(a,0,250,-10,10));
f2 = round(map(f,300,550,-10,10));
b2 = round(map(b,0,550,1,20));
c2 = round(map(c,0,550,1,20));
d2 = round(map(d,0,550,0,180));
}
if (e2 == 4) {
a2 = round(map(a,0,250,-10,10));
f2 = round(map(f,300,550,-10,10));
b2 = round(map(b,0,550,1,20));
c2 = round(map(c,0,550,0,180));
d2 = round(map(d,0,550,0,180));
}
if (e2 == 5) {
a2 = round(map(a,0,250,-10,10));
f2 = round(map(f,300,550,-10,10));
b2 = round(map(b,0,550,1,10));
c2 = round(map(c,0,550,3,20));
d2 = round(map(d,0,550,0,360));
}
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);
pushMatrix();
translate(300,450);
scale(1,-1);
fill(0,0,255,100);
if (e2 == 0) {
suorakulmio(a2,b2,c2,d2);
}
if (e2 == 1) {
suunnikas(a2,f2,b2,c2,d2);
}
if (e2 == 2) {
puolisuunnikas(a2,f2,b2,g2,c2,d2);
}
if (e2 == 3) {
kolmio(a2,f2,b2,c2,d2);
}
if (e2 == 4) {
kolmiokanta(a2,f2,b2,c2,d2);
}
if (e2 == 5) {
monikulmio(a2,f2,b2,c2,d2);
}
popMatrix();
fill(0);
fill(255);
rect(0,0,600,148);
stroke(0); // Musta viivan väri
strokeWeight(3);
fill(255,255,0); // Keltainen täyttöväri
if (e2 == 0) {
rect(0,0,599,30); // Piirrä keltainen suorakulmio
rect(0,30,599,30); // Piirrä keltainen suorakulmio
}
if ((e2 == 1) || (e2 == 3) || (e2 == 4) || (e2 == 5)) {
rect(0,0,299,30); // Piirrä keltainen suorakulmio
rect(300,0,299,30); // Piirrä keltainen suorakulmio
rect(0,30,599,30); // Piirrä keltainen suorakulmio
}
if (e2 == 2) {
rect(0,0,299,30); // Piirrä keltainen suorakulmio
rect(300,0,299,30); // Piirrä keltainen suorakulmio
rect(0,30,299,30); // Piirrä keltainen suorakulmio
rect(300,30,299,30); // Piirrä keltainen suorakulmio
}
rect(0,60,599,30); // Piirrä keltainen suorakulmio
rect(0,90,599,30); // Piirrä keltainen suorakulmio
rect(0,120,599,30);
fill(255,100,100); // Punainen täyttöväri
rect(a,0,50,30); // Piirrä punainen neliö
if ((e2 == 1) || (e2 == 3) || (e2 == 4) || (e2 == 5)) {
rect(f,0,50,30); // Piirrä punainen neliö
}
if (e2 == 2) {
rect(f,0,50,30); // Piirrä punainen neliö
rect(g,30,50,30); // Piirrä punainen neliö
}
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ö
rect(e,120,150,30);
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 ((e2 == 1) || (e2 == 3) || (e2 == 4) || (e2 == 5)) {
text(""+f2,f+4,25);
}
if (e2 == 2) {
text(""+f2,f+4,25);
text(""+g2,g+4,55);
}
textSize(15);
if (e2 == 0) {
text("Suorakulmio",e+4,145);
text("A = "+c2+"\u00b7"+d2+" = "+(c2*d2),10,175);
text("p = 2\u00B7"+c2+"+2\u00b7"+d2+" = "+(2*c2+2*d2),10,205);
}
if (e2 == 1) {
text("Suunnikas",e+4,145);
float h1 = c2*sin(radians(d2));
text("A = "+b2+"\u00b7"+nfc(abs(h1),2)+" = "+nfc((b2*abs(h1)),1),10,175);
text("p = 2\u00B7"+b2+"+2\u00b7"+c2+" = "+(2*b2+2*c2),10,205);
}
if (e2 == 2) {
text("Puolisuunnikas",e+4,145);
float ala = c2*((b2+g2)/2.0);
text("A = "+c2+"\u00b7("+b2+"+"+g2+"):2 = "+nfc(ala,1),10,175);
float s1 = mittaajana(a2,f2,a2+d2,f2+c2);
float s2 = mittaajana(a2+g2,f2,a2+d2+b2,f2+c2);
text("p = "+nfc(s1,2)+"+"+b2+"+"+nfc(s2,2)+"+"+g2+" = "+nfc((s1+b2+s2+g2),1),10,205);
}
if (e2 == 3) {
text("Kolmio",e+4,145);
float h2 = c2*sin(radians(d2));
float ala = (b2*h2)/2.0;
text("A = ("+b2+"\u00b7"+nfc(h2,2)+"):2 = "+nfc(ala,1),10,175);
float s1 = mittaajana(a2,f2,a2+c2*cos(radians(d2)),f2+c2*sin(radians(d2)));
float s2 = mittaajana(a2+b2,f2,a2+c2*cos(radians(d2)),f2+c2*sin(radians(d2)));
text("p = "+b2+"+"+nfc(s1,2)+"+"+nfc(s2,2)+" = "+nfc((s1+b2+s2),1),10,205);
}
if (e2 == 4) {
text("Kolmio 2",e+4,145);
float aa = (sin(radians(d2))*b2)/sin(radians(180-(c2+d2)));
float x0 = a2+aa*cos(radians(c2));
float y0 = f2+aa*sin(radians(c2));
float h2 = mittaajana(0,f2,0,y0);
float ala = (b2*h2)/2.0;
text("A = ("+b2+"\u00b7"+nfc(h2,2)+"):2 = "+nfc(ala,1),10,175);
float s1 = mittaajana(a2,f2,x0,y0);
float s2 = mittaajana(a2+b2,f2,x0,y0);
text("p = "+b2+"+"+nfc(s1,2)+"+"+nfc(s2,2)+" = "+nfc((s1+b2+s2),1),10,205);
}
if (e2 == 5) {
text("Monikulmio",e+4,145);
float k2 = (360.0/c2)/2.0;
float x2 = b2*sin(radians(k2));
float h2 = b2*cos(radians(k2));
float Ala = c2*x2*h2;
float piiri = c2*2*x2;
text("A = "+c2+"\u00B7"+nfc((x2*h2),2)+" = "+nfc(Ala,1),10,175);
text("p = "+c2+"\u00B7"+nfc((x2*2),2)+" = "+nfc((piiri),1),10,205);
}
}
void monikulmio(float x, float y, float sade, float lukumaara, float alkukulma) {
if (lukumaara > 0) {
float x22 = map(x,-10,10,-300,300);
float y22 = map(y,-10,10,-300,300);
if (lukumaara == 1) {
ellipse(x22,y22,5,5);
} else {
float lisays = 360.0/lukumaara;
float kulma = alkukulma+lisays;
beginShape();
for (int s = 0; s<=lukumaara; s++) {
float x11 = sade*30*cos(radians(kulma));
float y11 = sade*30*sin(radians(kulma));
vertex(x22+x11,y22+y11);
kulma = kulma+lisays;
}
endShape();
}
}
}
void suunnikas(float x, float y, float sivu1, float sivu2, float kulma) {
float x2 = map(x,-10,10,-300,300);
float y2 = map(y,-10,10,-300,300);
float sivu12 = map(sivu1,-10,10,-300,300);
float sivu22 = map(sivu2,-10,10,-300,300);
quad(x2,y2, x2+sivu12,y2, x2+sivu12+sivu22*cos(radians(kulma)),y2+sivu22*sin(radians(kulma)), x2+sivu22*cos(radians(kulma)),y2+sivu22*sin(radians(kulma)) );
}
void puolisuunnikas(float x, float y, float a, float b, float h, float dx) {
float x2 = map(x,-10,10,-300,300);
float y2 = map(y,-10,10,-300,300);
float a2 = map(a,-10,10,-300,300);
float b2 = map(b,-10,10,-300,300);
float h2 = map(h,-10,10,-300,300);
float dx2 = map(dx,-10,10,-300,300);
quad(x2,y2,x2+b2,y2,x2+a2+dx2,y2+h2,x2+dx2,y2+h2);
}
void kolmio(float x, float y, float sivu1, float sivu2, float kulma) {
float x2 = map(x,-10,10,-300,300);
float y2 = map(y,-10,10,-300,300);
float sivu12 = map(sivu1,-10,10,-300,300);
float sivu22 = map(sivu2,-10,10,-300,300);
triangle(x2,y2, x2+sivu12,y2, x2+sivu22*cos(radians(kulma)),y2+sivu22*sin(radians(kulma)) );
}
void kolmiokanta(float x1, float y1, float sivu, float kulma1, float kulma2) {
float x2 = map(x1,-10,10,-300,300);
float y2 = map(y1,-10,10,-300,300);
float sivu2 = map(sivu,-10,10,-300,300);
float a = (sin(radians(kulma2))*sivu)/sin(radians(180-(kulma1+kulma2)));
float x0 = x2+30*a*cos(radians(kulma1));
float y0 = y2+30*a*sin(radians(kulma1));
triangle(x2,y2,x2+sivu2,y2,x0,y0);
}
void suorakulmio(float x, float y, float leveys, float korkeus) {
float x2 = map(x,-10,10,-300,300);
float y2 = map(y,-10,10,-300,300);
float leveys2 = map(leveys,-10,10,-300,300);
float korkeus2 = map(korkeus,-10,10,-300,300);
rect(x2,y2,leveys2,korkeus2);
}
float mittaajana(float x1, float y1, float x2, float y2) {
float pituus = sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
return pituus;
}