Kulman mittaaminen
Kulman mittaaminen

Tämä simulaatio on suunniteltu kulman mittaamisen harjoitteluun. Tällä voidaan myös harjoitella kulman puolitusta. Kopioi alla oleva koodi ja aja ohjelma. Älä tee koodiin muutoksia.
// Ohjelman tehnyt e-Oppi Oy
// 18.2.2018
float b = 0;
float d = 275; // Laskurin alkuarvo (ikkunan keskellä)
float k1 = round(random(10,180));
float k2 = round(random(10,320));
boolean arvo = false;
boolean pohjassa = false;
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 < 40)) {
if ((x1>d) && (d < 540)) { // Jos hiiri on oikealla puolen
d++; // niin kasvata laskuria
}
if ((x1<d) && (d >=0)) { // Jos hiiri on vasemmalla puolen
d--; // 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) && (b >=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
arvo = true;
}
}
} else {
pohjassa = false;
}
fill(0); // Musta tekstin väri
int d2 = round(map(d,0,550,-270,270));
int b2 = round(map(b,0,550,0,2));
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);
}
pushMatrix();
translate(300,450);
scale(1,-1);
noFill();
strokeWeight(3);
if (b2 == 2) {
float k3 = k2/2.0;
stroke(0,0,255);
arc(0,0,1000,1000,radians(k1),radians(k1+k3),PIE);
stroke(0,0,255,40);
arc(0,0,1000,1000,radians(k1),radians(k1+k3+180),PIE);
}
stroke(255,0,0);
arc(0,0,1000,1000,radians(k1),radians(k1+k2),PIE);
arc(0,0,60,60,radians(k1),radians(k1+k2),PIE);
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,40); // Piirrä keltainen suorakulmio
rect(0,40,849,40); // Piirrä keltainen suorakulmio
fill(255,100,100); // Punainen täyttöväri
rect(d,0,60,40); // Piirrä punainen neliö
rect(b,40,50,40); // Piirrä punainen neliö
rect(400,90,150,40,30);
fill(0);
textSize(20);
text("Arvo kulma",420,120);
text(""+d2+"\u00B0",d+4,35);
text(""+b2,b+4,75);
if ((b2 == 1) || (b2 == 2)) {
text("\u03B1 = "+nfc(k2,0)+"\u00B0",10,145);
text("\u03B2 = "+nfc(360-k2,0)+"\u00B0",210,145);
}
piirtokolmio(180-d2);
if ((arvo == true) && (pohjassa == false)){
fill(255,0,0);
rect(400,90,150,40,30);
arvo = false;
pohjassa = true;
k1 = round(random(10,180));
k2 = round(random(10,320));
}
}
void piirtokolmio(float kulma) {
fill(0,100,255,100);
noStroke();
float h = 300;
pushMatrix();
translate(300,450);
rotate(radians(kulma));
triangle(-h,0,h,0,0,h);
fill(0);
ellipse(0,0,5,5);
for (int s = 0; s <= 180; s = s + 10) {
float a1 = 200*cos(radians(s));
float b1 = 200*sin(radians(s));
float a2 = 10*cos(radians(s));
float b2 = 10*sin(radians(s));
stroke(0,0,255);
strokeWeight(1);
line(a1,b1,a2,b2);
}
for (int s = 0; s <= 180; s = s + 5) {
float a1 = 200*cos(radians(s));
float b1 = 200*sin(radians(s));
float a2 = 180*cos(radians(s));
float b2 = 180*sin(radians(s));
stroke(0);
strokeWeight(1);
line(a1,b1,a2,b2);
}
for (int s = 0; s <= 180; s = s + 45) {
float a1 = 200*cos(radians(s));
float b1 = 200*sin(radians(s));
float a2 = 40*cos(radians(s));
float b2 = 40*sin(radians(s));
stroke(255,0,255);
strokeWeight(1);
line(a1,b1,a2,b2);
}
for (int s = 0; s <= 180; s = s + 1) {
float a1 = 200*cos(radians(s));
float b1 = 200*sin(radians(s));
stroke(0);
strokeWeight(1);
point(a1,b1);
}
popMatrix();
}