start situatie

rode en groene bal zelfde gewicht

vallen tgv zwaartekracht (yk)

toetsfuncties

1) rode en groene bal, zelfde gewicht
    met wind (xk) naar rechts
2) rode en groene bal, verschillend gewicht
    met wind (xk) naar rechts
3) rode en groene bal verschillend gewicht
    zonder wind
4) blauwe bal hogere snelheid  in y richting
5) lichtblauwe bal krijgt hogere beginsnelheid
    naar beneden
6) resetknop
 

 

zwaartekracht en wind uitgeoefend op ballen met verschillende massa     terug naar de inleiding

De schets maakt gebruik van objecten van de class "Mover3" (staat onder deze schets) en de class "Ruitjes"

Nu wordt aangetoond dat ballen met verschillend gewicht dezelfde valsnelheid hebben, dit is aangetoond door Galileo
Door de kracht van wind worden ballen met een laag gewicht sneller weggeblazen.
 
 

let mover1; let mover2; let mover3; let mover4; let n;
function setup() { 
 createCanvas(windowWidth, windowHeight); 
 x = width/2; 
 y = height/2; 
 n = height/20; 
 //constructor 
 //1) en 2) x,y start positie bal, 3) xk = kracht in x richting 4) yk = kracht in y richting 
 //5) snelheid xv in x richting, 6) snelheid yv in y richting, 7) diameter bal , 8) kleur bal
//constructor       1   2   3   4   5   6   7   8 
 mover1 = new Mover3(x, y, 0, 0.001, 0, 0, n, color(255,0,0));//rode bal 
 //mover 2 kracht in -x richting de bal stuitert naar links 
 mover2 = new Mover3(x, y, 0, 0.001, 0, 0, n,color(0,255,0));//groene bal 
 //mover 3 kracht in -y richting dus de bal stuitert omhoog 
 mover3 = new Mover3(x, y, 0, -0.001, 0, 0, 2*n,color(0,255,255));//lichtblauwe bal 
 //mover 4 kracht in x richting de bal stuitert naar rechts 
 mover4 = new Mover3(x, y, -0.001, 0, 0, 0, 2*n,color(0,0,255));//blauwe bal 
 ruitjespap = new Ruitjes(n, x, y); 
}
function draw() { 
 background('#E6FBFF'); 
 ruitjespap.display(); 
 mover1.applyForce(); 
 mover1.update(); 
 mover1.edges(); 
 mover1.show();
 mover2.applyForce(); 
 mover2.update(); 
 mover2.edges(); 
 mover2.show();
 mover3.applyForce(); 
 mover3.update(); 
 mover3.edges(); 
 mover3.show();
 mover4.applyForce(); 
 mover4.update(); 
 mover4.edges(); 
 mover4.show();
 
} 
//xk is de wind (kracht in x richting) 
function keyPressed() { 
 if (key == '1') { 
 mover1.accSet();//rode bal 
 mover2.accSet();//groene bal 
 mover1.xk = 0.005; 
 mover2.xk = 0.005; 
} 

 
if (key == '2') { 
 mover1.accSet();//rode bal 
 mover2.accSet();//groene bal 
 mover1.xk = 0.005; 
 mover2.xk = 0.005; 
 mover2.d = 2*n; 
} 
if (key == '3') { 
 mover1.accSet();//rode bal 
 mover2.accSet();//groene bal 
 mover1.xk = 0; 
 mover2.xk = 0; 
 mover2.d = 2*n; 
} 

if (key == '4') { 
 mover4.accSet();//blauwe bal krijgt hogere kracht (wind naar links) 
 mover4.xk = -0.005; 
} 
if (key == '5') { 
 mover3.accSet();//lichtblauwe bal krijgt hogere beginsnelheid naar beneden 
 mover3.yv = 0.1; 
} 
if (key == '6') { 
 setup(); 
} 
}

class "Mover3"

 
 class Mover3 {
  constructor(x, y, xk, yk, xv, yv, d, c) {
    this.c = c; this.d = d;  this.xk = xk; this.yk = yk;
    this.pos = createVector(x,y); // positie vector,
    this.vel = createVector(xv,yv); //snelheidsvector
    this.acc = createVector(0,0);   //versnellingsvector
}
 
  applyForce() {
    //nu de krachtvector splitsen in gravity en wind vector
    //de kracht- en windvector worden aangemaakt
    this.wind = createVector(this.xk,0);
    this.gravity = createVector(0,this.yk);
    //toepassen van de wet van newton versnelling = kracht/massa
    //dus met een grote massa is er minder versnelling
    let mass = sqrt(this.d/2)*PI;//de massa is afgeleid van de diameter van de ellipsen
    let w = p5.Vector.div(this.wind, mass);
    //door massa is er minder zwaartekracht versnelling want versnelling = kracht/massa
    let f = p5.Vector.div(this.gravity, mass);
    //het gewicht van de bal wordt bepaald door de zwaartekracht f
    //door de zwaartekracht versnelling te vermenigvuldigen met de massa
    //zo vallen kleine massa's net zo snel als de grote massa's
    let gewicht = p5.Vector.mult(f,mass)
    //het gewicht (y component van de vector) wordt opgeteld bij de versnellingsvector acc
    this.acc.add(gewicht);
    this.acc.add(w); //de x component van de vector is de wind w
  }
//voor nieuwe instellingen met de toetsen moet de versnellingsvector 0,0 zijn
  accSet() {
    this.acc.set(0,0);
  }
 
  update(){
    this.vel.add(this.acc);
    //door de snelheidsvector bij de positie vector op te tellen wordt de positie van de bal berekend
    this.pos.add(this.vel);
  }
 
  edges() {
    if (this.pos.y >= height-this.d/2) {
      this.pos.y = height-this.d/2;
      this.vel.y = this.vel.y * -1;
    }
    if (this.pos.y <= 0+this.d/2) {
      this.pos.y = 0+this.d/2;
      this.vel.y = this.vel.y * -1;
    }
    if (this.pos.x >= width-this.d/2) {
      this.pos.x = width-this.d/2;
      this.vel.x = this.vel.x * -1;
    }
    if (this.pos.x <= 0+this.d/2) {
      this.pos.x = 0+this.d/2;
      this.vel.x = this.vel.x * -1;
    }
  }
 
  show(){
    stroke(255,0,0);
    strokeWeight(2);
    fill(this.c);
    ellipse(this.pos.x, this.pos.y, this.d, this.d);
  }
}