Wcupでゲーム終了後、清掃するサポータの話が話題になっているようです。これを聞いて思い出したことがあります。
昨日、プログラミングの授業で、講義を終えて実習室に移動する時、机の上の消しゴムの消しカスを集めてゴミ箱に捨てている男子学生がいました。私は、やったことがないなと思い、感心しました。
===
Javaプログラムを習いたての人が、グラフィックスを使わないで、シミュレーションっぽいことを行う簡単なプログラムを考えました。
テーマ:斜方投射物体の飛行軌跡を表示
左下から撃ち出された物体が空中を飛んで着地するまでの何点かを表示する。
斜方投射物体の物理的位置は次の通りです。
水平到達距離
v*v*sin2z/g;
垂直距離
v*v*sinz*sinz/(2*g);
全飛行時間
tt=2*v*sinz/g;
1/4飛行時
t4=v*sinz/(2*g);
x座標:v*cosz*t4;
y座標:v*sinz*t4-(1/2)*g*t4*t4;
1/2飛行時(頂点)
X座標:v*v*sinz*cosz/g;
Y座標:v*v*sinz*sinz/(2*g);
目安:60m/sで撃ち出すと最大距離約360m
横軸10mで全角1文字
垂直は最大約180m
Javaでの三角関数(degは発射角度)
Math.sin(Math.toRadians(deg));
Math.cos(Math.toRadians(deg));
zは、degをラジアンに変換したもの。
変数の説明:
v:初速、deg:発射角度(度)、t4:1/4飛行時間
maxx:水平到達距離
maxy:頂点のy座標
maxy4:1/4飛行時の高さ
===着地点の他、頂点だけを表示するもの====
class T1{
public static void main(String args[]){
double v=60, x,y,deg=45;
double g=9.8;
int maxx,maxy,maxy2,target=360;
maxx=(int)(v*v*Math.sin(2*Math.toRadians(deg))/g);
maxy=(int)(v*v*Math.sin(Math.toRadians(deg))*Math.sin(Math.toRadians(deg))/(2*g));
//頂点
for(int i=0; i<(maxx/20); i++){
System.out.print(“ ”);
}
System.out.println(“.”);
for(int i=0; i<(maxy/20)-1; i++){
System.out.println();}
//砲台
System.out.print(“//”);
//着地
for(int i=0; i<maxx/10-1; i++){
System.out.print(“ ”);
}
System.out.println(“*”);
//表的
for(int i=0; i<(target/10); i++){
System.out.print(“ ”);
}
System.out.println(“T”);
}
}
===着地点の他、空中3点を表示するもの===
class T4{
public static void main(String args[]){
double v=60,t4,deg=45;
double g=9.8;
int maxx,maxy,maxy4,target=360;
t4=v*Math.sin(Math.toRadians(deg))/(2*g);
maxx=(int)(v*v*Math.sin(2*Math.toRadians(deg))/g);
maxy=(int)(v*v*Math.sin(Math.toRadians(deg))*Math.sin(Math.toRadians(deg))/(2*g));
maxy4=(int)(v*Math.sin(Math.toRadians(deg))*t4-(1/2)*g*t4*t4);
//頂点
for(int i=0; i<(maxx/20); i++){
System.out.print(“ ”);
}
System.out.println(“・”);
//1/4時点
for(int i=0; i<((maxy-maxy4)/10); i++){
System.out.println();
}
for(int i=0; i<(maxx/40); i++){
System.out.print(“ ”);
}
System.out.print(“・”);
//3/4時点
for(int i=0; i<(maxx/20)-1; i++){
System.out.print(“ ”);
}
System.out.println(“・”);
for(int i=0; i<(maxy4/10)-2; i++){
System.out.println();
}
//砲台
System.out.print(“//”);
//落下地点
for(int i=0; i<(maxx/10)-1; i++){
System.out.print(“ ”);
}
System.out.println(“*”);
//表的
for(int i=0; i<(target/10); i++){
System.out.print(“ ”);
}
System.out.println(“T”);
}
}