close all; clear all; clc;
graymap = [1:1000;1:1000;1:1000]'/1000;
graymap = flipud(graymap);
figure; set(gcf,'DefaultAxesColorOrder',graymap);
pos = 8;
v = 0;
g = -9.81;
cor = 0.8;
dt = 0.01;
i = 1;
x = [1:1000]/100;
while(1)
pos = pos+v*dt;
v = v+g*dt;
if pos<=0
v = -v*cor;
% pos = 0;
end
plot(x(i),pos,'o','Color',graymap(i,:));
xlim([-1,11]); ylim([-1,10]);
drawnow; hold on;
pause(dt/2);
i=i+1;
if i > 1000
break;
end
end
# Adapted from Visual Python bounce.py example
from visual import *
dt = 0.01
g = 9.81
y = 10
COR = 0.9 # Coefficient of restitution
##bounce = False
scene = display(title = 'Ball Python', x=0, y=0, width=500, height=500, center=(0,5,1))
floor = box(length=10, height=0.5, width=10, color = color.cyan, material = materials.marble)
ball = sphere(pos=(0,y,0), radius = 1, color = color.orange, material = materials.chrome)
ball.velocity = vector(0,0,0)
while 1:
rate(100)
ball.pos = ball.pos + ball.velocity*dt
## if ball.velocity > 0:
## bounce = True
if ball.y < 1:
ball.velocity.y = -ball.velocity.y*COR
ball.y = 1
## if bounce :
## ball.velocity.y = -ball.velocity.y*COR
## bounce = False
## else:
## ball.color = color.red
else:
ball.velocity.y = ball.velocity.y - g*dt
PVector pos;
PVector v;
PVector g;
int r = 50;
int h = 500;
float COR = 0.8;
void setup() {
size(600, 600, P3D);
smooth();
pos = new PVector(0, 100, 0);
v = new PVector(0, 0, 0);
g = new PVector(0, 9.81, 0);
}
void draw() {
background(0);
lights();
pos.add(v);
v.add(g);
if(pos.y > h){
if(v.y < 50){
v.y = 0; // prevent permabounce
}
v.y = -v.y*COR;
// pos.y = h;
}
noStroke();
translate(300,pos.y,0);
sphere(r);
// stroke(255);
// strokeWeight(1);
// fill(127);
// ellipse(300, pos.y, r,r);
}