/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.SGAE0jk0Ae$/rev.2360
*
* authors:
* tapesofwrath
* Thomas Bell
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
float V0 = 30.0;
float theta = 45.0 * PI/180;
float Vx = V0 * cos(theta);
float Vy = -V0 * sin(theta);
float n = 1;
float g = 9.8;
float Ay = g;
float Ax = 0;
float scale = 6;
float dt = .2;
float xStart = 20;
float yStart = 235;
float objectHeight = 20;
float maxY = 250 - objectHeight/2;
float x = 0;
float y = 0;
float xOld, yOld, xPixel, yPixel, VxOld, VyOld, flightTime, dtNew;
ArrayList tracex, tracey;
var hit = false;
void setup(){
size(600, 300);
smooth();
fill(153);
ellipse(20, 235, 20, 20);
ellipse(20, 235, 5, 5);
line(0, 250, 600, 250);
frameRate(25);
background(255);
tracex = new ArrayList();
tracey = new ArrayList();
}
void draw() {
background(255);
ellipse(20, 235, 7.5, 7.5);
int len = tracex.size();
for(int i=0; i < len; i++) {
ellipse(tracex.get(i), tracey.get(i), 7.5, 7.5);
}
line(0, 250, 600, 250);
tracex.add(xPixel);
tracey.add(yPixel);
xOld = x;
x = x + Vx * dt + .5 * Ax * dt * dt;
xPixel = xStart + (scale * x);
yOld = y;
y = y + Vy * dt + .5 * Ay * dt * dt;
yPixel = yStart + (scale * y);
VxOld = Vx;
Vx = Vx + Ax * dt;
VyOld = Vy;
Vy = Vy + Ay * dt;
flightTime = n * dt;
if(yPixel > maxY) {
yGround = (maxY - yStart) / scale;
z = VyOld / Ay;
dtNew = -z + sqrt((z * z) - 2. * (yOld - yGround) / Ay);
x = xOld + VxOld * dtNew + .5 * Ax * dtNew * dtNew;
xPixel = xStart + (scale * x);
y = yOld + VyOld * dtNew + .5 * Ay * dtNew * dtNew;
yPixel = yStart + (scale * y);
Vx = VxOld + Ax * dtNew;
Vy = VyOld + Ay * dtNew;
flightTime = (n - 1) * dt + dtNew;
noLoop();
hit = true;
}
ellipse(xPixel, yPixel, 20, 20);
text("Flight Time: " + flightTime.toFixed(2) + " s", 15, 30);
text("Range: " + x.toFixed(1) + " m", 15, 45);
n++;
}
void mouseClicked() {
if(hit) {
noStroke();
fill(255);
rect(14,48,175,35);
stroke(0);
fill(153);
text("mouseX: " + mouseX, 15, 60);
}
}