天文学の授業で「地動説に対する反論」を説明する為にProcessingで作成したアニメーション。こういう教材を簡単に作れるので、本当はどこかの授業で学生さんにProcessingを触ってもらいたいところ。Processing.jsで動かしたアリストテレス or ニュートン的な描像はそれぞれ、
こちらと
こちら。
float glevel=0.8;
float x;
float xb, yb, vy=0, vxw;
float headsize;
int t=0;
int ball_start=150;
float g;
float[] xbo=new float[500];
float[] ybo=new float[500];
void setup() {
x=100;
size(1100, 700);
colorMode(RGB, 256);
background(255, 255, 255);
headsize=width*0.03;
frameRate(50);
xb=0;
yb=height*glevel*0.15;
g=0.05;
vxw=width*0.002;
for (int i=0; i<500 i="" p=""> xbo[i]=0;
ybo[i]=0;
}
}
void draw() {
background(255, 255, 255);
//smooth() ;
//World
stroke(0, 0, 0);
strokeWeight(1);
line(0, height*glevel, width, height*glevel);
noStroke();
//point
fill(255, 0, 0);
ellipse(x, height*glevel, width*0.01, width*0.01);
//man
fill(0, 0, 0);
//head
ellipse(x+width*0.1, height*glevel*0.71, headsize, headsize);
//body
rect(x+width*(0.1-0.025), height*glevel*0.75, width*(0.05), height*0.1);
//leg
rect(x+width*(0.1-0.025), height*glevel*0.89, width*(0.02), height*0.085);
rect(x+width*(0.1+0.005), height*glevel*0.89, width*(0.02), height*0.085);
//arm
rect(x+width*(0.1-0.045), height*glevel*0.75, width*(0.015), height*0.08);
rect(x+width*(0.1+0.03), height*glevel*0.75, width*(0.015), height*0.08);
//Bar
strokeWeight(10);
stroke(183, 65, 14);
line(x+width*0.2, height*glevel, x+width*0.2, height*glevel*0.1);
line(x, height*glevel*0.1, x+width*0.2, height*glevel*0.1);
//Ball Shadow
for (int i=1; i if ( i%20==0) {
stroke(150);
strokeWeight(1);
noFill();
ellipse(xbo[i], ybo[i], width*0.03, width*0.03);
}
}
//Ball
xbo[t]=xb;
ybo[t]=yb;
if (t>ball_start & yb<=height*glevel) {
vy=vy+g;
yb=yb+vy;
//下の1文を入れるか入れないかが両者の差。
xb=x;
} else {
xb=x;
}
if (yb>=height*glevel) {
vy=0;
yb=height*glevel;
xb=xb+vxw;
}
noStroke();
fill(0, 0, 255);
ellipse(xb, yb, width*0.03, width*0.03);
x=x+vxw;
print(t, "\n");
if (t<499 p=""> t++;
}
}
499>500>