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);
}
}