Kolmio
Kolmio

Tämä simulaatio havainnollistaa kolmion piirtämistä xy-koordinaatistoon. Kolmioon voidaan tarvittaessa lisätä korkeusjanat, keskijanat, kulman puolittajat, sivujen keskinormaalit, sivujen pituudet ja kulmat. Kopioi alla oleva koodi ja aja ohjelma. Älä tee koodiin muutoksia.
// Ohjelman tehnyt e-Oppi Oy
// 15.2.2018
float a = 85; // Laskurin alkuarvo
float b = 120; // Laskurin alkuarvo
float c = 285; // Laskurin alkuarvo
float d = 450; // Laskurin alkuarvo
float e = 480; // Laskurin alkuarvo
float f = 120; // Laskurin alkuarvo
float g = 60; // Laskurin alkuarvo
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
}
}
if ((y1 > 120) && (y1 < 150)) {
if ((x1>e) && (e < 550)) { // 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 > 150) && (y1 < 180)) {
if ((x1>f) && (f < 550)) { // Jos hiiri on oikealla puolen
f++; // niin kasvata laskuria
}
if ((x1<f) && (x1 >0)) { // Jos hiiri on vasemmalla puolen
f--; // niin pienennä laskuria
}
}
if ((y1 > 180) && (y1 < 210)) {
if ((x1>g) && (g < 400)) { // Jos hiiri on oikealla puolen
g++; // niin kasvata laskuria
}
if ((x1<g) && (x1 >0)) { // Jos hiiri on vasemmalla puolen
g--; // niin pienennä laskuria
}
}
}
fill(0); // Musta tekstin väri
int a2 = round(map(a,0,550,-10,10));
int b2 = round(map(b,0,550,-9,9));
int c2 = round(map(c,0,550,-10,10));
int d2 = round(map(d,0,550,-9,9));
int e2 = round(map(e,0,550,-10,10));
int f2 = round(map(f,0,550,-9,9));
int g2 = round(map(g,0,400,0,7));
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,210+z*30,600,210+z*30);
}
strokeWeight(3);
stroke(0);
line(300,150,300,750);
line(0,450+30,600,450+30);
fill(0);
triangle(590,440+30,598,450+30,590,460+30);
triangle(300,150+62,310,160+62,290,160+62);
text("x",580,430+30);
text("y",315,170+62);
textSize(20);
text("1",323,470+30);
text("1",280,430+30);
pushMatrix();
translate(300,480);
scale(1,-1);
fill(0,0,255);
stroke(0,0,255);
strokeWeight(5);
if (g2 >= 1) {
line(a2*30,b2*30,c2*30,d2*30);
line(c2*30,d2*30,e2*30,f2*30);
line(a2*30,b2*30,e2*30,f2*30);
}
if (g2 == 2) {
korkeusjana(a2,b2,c2,d2,e2,f2);
korkeusjana(a2,b2,e2,f2,c2,d2);
korkeusjana(c2,d2,e2,f2,a2,b2);
}
if (g2 == 3) {
keskijana(a2,b2,c2,d2,e2,f2);
keskijana(a2,b2,e2,f2,c2,d2);
keskijana(c2,d2,e2,f2,a2,b2);
}
if (g2 == 4) {
kulmanpuolittaja(a2,b2,c2,d2,e2,f2);
kulmanpuolittaja(c2,d2,e2,f2,a2,b2);
kulmanpuolittaja(e2,f2,a2,b2,c2,d2);
}
if (g2 == 5) {
normaali(a2,b2,c2,d2);
normaali(a2,b2,e2,f2);
normaali(c2,d2,e2,f2);
}
if (g2 == 6) {
mittaajana(a2,b2,c2,d2);
mittaajana(a2,b2,e2,f2);
mittaajana(c2,d2,e2,f2);
}
if (g2 == 7) {
mittaakulma(a2,b2,c2,d2,e2,f2);
mittaakulma(c2,d2,e2,f2,a2,b2);
mittaakulma(e2,f2,a2,b2,c2,d2);
}
noStroke();
fill(255,0,0);
ellipse(a2*30,b2*30,10,10);
ellipse(c2*30,d2*30,10,10);
ellipse(e2*30,f2*30,10,10);
popMatrix();
fill(0);
text("A",300+a2*30,480-b2*30);
text("B",300+c2*30,480-d2*30);
text("C",300+e2*30,480-f2*30);
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,600,30); // Piirrä keltainen suorakulmio
rect(0,30,600,30); // Piirrä keltainen suorakulmio
rect(0,60,600,30); // Piirrä keltainen suorakulmio
rect(0,90,600,30); // Piirrä keltainen suorakulmio
rect(0,120,600,30);
rect(0,150,600,30);
rect(0,180,600,30);
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ö
rect(e,120,50,30);
rect(f,150,50,30);
rect(g,180,200,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);
text(""+e2,e+4,145);
text(""+f2,f+4,175);
textSize(15);
if (g2 == 0) {
text("Pisteet",g+4,205);
}
if (g2 == 1) {
text("Kolmio",g+4,205);
}
if (g2 == 2) {
text("Korkeusjanat",g+4,205);
}
if (g2 == 3) {
text("Keskijanat",g+4,205);
}
if (g2 == 4) {
text("Kulman puolittajat",g+4,205);
}
if (g2 == 5) {
text("Sivujen keskinormaalit",g+4,205);
}
if (g2 == 6) {
text("Sivujen pituudet",g+4,205);
}
if (g2 == 7) {
text("Kulmat",g+4,205);
}
}
void mittaakulma(float x1, float y1, float x2, float y2, float x3, float y3) {
float xx1 = map(x1,-10,10,-300,300);
float yy1 = map(y1,-10,10,-300,300);
float xx2 = map(x2,-10,10,-300,300);
float yy2 = map(y2,-10,10,-300,300);
float xx3 = map(x3,-10,10,-300,300);
float yy3 = map(y3,-10,10,-300,300);
float sade1 = sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
float sade2 = sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
float kulma1 = acos(abs(x1-x2)/sade1);
float kulma2 = acos(abs(x3-x2)/sade2);
float summa1 = 0;
float summa2 = 0;
float lisays = 0;
if ( ((y1-y2) == 0) && (x1 >= x2) ) { summa1 = 0; }
if ( ((y2-y1) == 0) && (x2 > x1) ) { summa1 = 180; }
if ( ((x1-x2) == 0) && (y1 >= y2) ) { summa1 = 90; }
if ( ((x2-x1) == 0) && (y2 > y1) ) { summa1 = 270; }
if (abs(x3-x2) == 0) {
lisays = 90-degrees(kulma1);
}
if ( ((x1-x2) > 0) && ((y1 -y2) > 0) ) {
summa1 = degrees(kulma1);
}
if ( ((x1-x2) < 0) && ((y1 -y2) > 0) ) {
summa1 = (90-degrees(kulma1))+90;
}
if ( ((x1-x2) < 0) && ((y1 -y2) < 0) ) {
summa1 = degrees(kulma1)+180;
}
if ( ((x1-x2) >=0) && ((y1 -y2) < 0) ) {
summa1 = 360-degrees(kulma1);
}
if ( ((x3-x2) > 0) && ((y3 -y2) > 0) ) {
summa2 = degrees(kulma2);
if ((summa1 >= 0) && (summa1 < 90)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) <= 0) && ((y3 -y2) >= 0) ) {
summa2 = (90-degrees(kulma2))+90;
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) <= 0) && ((y3 -y2) <= 0) ) {
summa2 = degrees(kulma2)+180;
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = summa2-summa1;
}
if ((summa1 >= 180) && (summa1 < 270)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) >= 0) && ((y3 -y2) <= 0) ) {
summa2 = 360-degrees(kulma2);
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = summa2-summa1;
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = summa2-summa1;
}
if ((summa1 >= 270) && (summa1 < 360)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
}
float summa3 = (summa1+summa1+lisays)/2;
strokeWeight(6);
point(xx1,yy1);
point(xx2,yy2);
point(xx3,yy3);
strokeWeight(3);
line(xx2,yy2,xx1,yy1);
line(xx2,yy2,xx3,yy3);
noFill();
arc(xx2,yy2,35,35,radians(summa1),radians(summa1+lisays),PIE);
float ds = 20*(sade1 + sade2)/2;
float dx = ds*cos(radians(summa3));
float dy = ds*sin(radians(summa3));
fill(0);
pushMatrix();
scale(1,-1);
fill(255,0,0);
text(""+nfc(lisays,1)+"\u00B0",xx2+dx/3,-(yy2+dy/4));
popMatrix();
strokeWeight(2);
}
void mittaajana(float x1, float y1, float x2, float y2) {
float x12 = map(x1,-10,10,-300,300);
float y12 = map(y1,-10,10,-300,300);
float x22 = map(x2,-10,10,-300,300);
float y22 = map(y2,-10,10,-300,300);
float x0 = (x12+x22)/2;
float y0 = (y12+y22)/2;
float pituus = sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));
strokeWeight(5);
line(x12,y12,x22,y22);
strokeWeight(10);
point(x12,y12);
point(x22,y22);
pushMatrix();
scale(1,-1);
fill(255,0,0);
text(""+round(10*pituus)/10.0,x0+20,-y0+20);
popMatrix();
}
void normaali(float x1, float y1, float x2, float y2) {
float x12 = map(x1,-10,10,-300,300);
float y12 = map(y1,-10,10,-300,300);
float x22 = map(x2,-10,10,-300,300);
float y22 = map(y2,-10,10,-300,300);
strokeWeight(2);
stroke(255,0,0);
float x0 = (x1+x2)/2;
float y0 = (y1+y2)/2;
float k = ((y22-y12)/(x22-x12));
if (y1 == y2) {
line(x0*30,300,x0*30,-300);
}
float sx1 = -300.0;
float sx2 = 300.0;
float ys1 = (-1/k)*(sx1)+((1/k)*x0+y0)*30;
float ys2 = (-1/k)*(sx2)+((1/k)*x0+y0)*30;
line(sx1,ys1,sx2,ys2);
}
void korkeusjana(float x1, float y1, float x2, float y2, float x3, float y3) {
float x12 = map(x1,-10,10,-300,300);
float y12 = map(y1,-10,10,-300,300);
float x22 = map(x2,-10,10,-300,300);
float y22 = map(y2,-10,10,-300,300);
strokeWeight(2);
stroke(255,0,0);
float k = ((y22-y12)/(x22-x12));
if (y1 == y2) {
line(x3*30,300,x3*30,-300);
}
float sx1 = -300.0;
float sx2 = 300.0;
float ys1 = (-1/k)*(sx1)+((1/k)*x3+y3)*30;
float ys2 = (-1/k)*(sx2)+((1/k)*x3+y3)*30;
line(sx1,ys1,sx2,ys2);
}
void keskijana(float x1, float y1, float x2, float y2,float x3, float y3) {
stroke(255,0,0);
strokeWeight(2);
float x0 = (x1+x2)/2;
float y0 = (y1+y2)/2;
line(x0*30,y0*30,x3*30,y3*30);
}
void kulmanpuolittaja(float x1, float y1, float x2, float y2, float x3, float y3) {
float xx1 = map(x1,-10,10,-300,300);
float yy1 = map(y1,-10,10,-300,300);
float xx2 = map(x2,-10,10,-300,300);
float yy2 = map(y2,-10,10,-300,300);
float xx3 = map(x3,-10,10,-300,300);
float yy3 = map(y3,-10,10,-300,300);
float sade1 = sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
float sade2 = sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
float kulma1 = acos(abs(x1-x2)/sade1);
float kulma2 = acos(abs(x3-x2)/sade2);
float summa1 = 0;
float summa2 = 0;
float lisays = 0;
if ( ((y1-y2) == 0) && (x1 >= x2) ) { summa1 = 0; }
if ( ((y2-y1) == 0) && (x2 > x1) ) { summa1 = 180; }
if ( ((x1-x2) == 0) && (y1 >= y2) ) { summa1 = 90; }
if ( ((x2-x1) == 0) && (y2 > y1) ) { summa1 = 270; }
if (abs(x3-x2) == 0) {
lisays = 90-degrees(kulma1);
}
if ( ((x1-x2) > 0) && ((y1 -y2) > 0) ) {
summa1 = degrees(kulma1);
}
if ( ((x1-x2) < 0) && ((y1 -y2) > 0) ) {
summa1 = (90-degrees(kulma1))+90;
}
if ( ((x1-x2) < 0) && ((y1 -y2) < 0) ) {
summa1 = degrees(kulma1)+180;
}
if ( ((x1-x2) >0) && ((y1 -y2) < 0) ) {
summa1 = 360-degrees(kulma1);
}
if ( ((x3-x2) > 0) && ((y3 -y2) >= 0) ) {
summa2 = degrees(kulma2);
if ((summa1 >= 0) && (summa1 < 90)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) < 0) && ((y3 -y2) >= 0) ) {
summa2 = (90-degrees(kulma2))+90;
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = 360-summa1+summa2;
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) < 0) && ((y3 -y2) < 0) ) {
summa2 = degrees(kulma2)+180;
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = summa2-summa1;
}
if ((summa1 >= 180) && (summa1 < 270)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
if ((summa1 >= 270) && (summa1 < 360)) {
lisays = 360-summa1+summa2;
}
}
if ( ((x3-x2) > 0) && ((y3 -y2) < 0) ) {
summa2 = 360-degrees(kulma2);
if ((summa1 >= 0) && (summa1 < 90)) {
lisays = summa2-summa1;
}
if ((summa1 >= 90) && (summa1 < 180)) {
lisays = summa2-summa1;
}
if ((summa1 >= 180) && (summa1 < 270)) {
lisays = summa2-summa1;
}
if ((summa1 >= 270) && (summa1 < 360)) {
if (summa2 > summa1) {
lisays = summa2-summa1;
} else {
lisays = 360-summa1+summa2;
}
}
}
strokeWeight(6);
point(xx1,yy1);
point(xx2,yy2);
point(xx3,yy3);
strokeWeight(2);
noFill();
stroke(255,0,0);
pushMatrix();
translate(xx2,yy2);
rotate(radians(summa1+lisays/2.0));
line(0,0,600,0);
popMatrix();
}