水平投射されて床に落ちるボールのアニメーションを書きたいのですが、上手くいきません。
なるべく早い回答が欲しいです。
重力加速度:9.8[m/sec^2]
ボールと床との反発係数:0.8
初速度:10.0[m/sec]
高さ:20[m]
床面との反発前後で連続性が確認できるように、計算式自体を同一に。
鉛直投げ上げ運動の頂点からのスタートだと考えれば、上手くいくかなあと思い、
床に落ちた回数をcと置き、ボールのy座標がy=0(床に落ちた)になったら、0から1つずつ増えていくようにしました。
添付写真が実行結果です。
大学の課題です。
授業自体が200ページ程度の教科書を渡されただけの自習型、かつ物理を高校で習っておらず、どこが間違っているのか発見できませんでした。
ご指導お願いします。
表示にはコマンドプロンプトとDOSBOXを使用しています。
#include "Graph.h"
#include <stdio.h>
#include <conio.h>
main()
{
double x,y;
double vx,vy;
double ay;
double t,g;
int c,a;
SetGraphicsMode();
ClearScreen(0);
g=9.8; //重力加速度
t=0.0; //時間
c=0; //床についた回数
a=1;
x=0.0; //x座標
y=20.0; //y座標
vx=10.0; //x方向の速さ
vy=0.0; //y方向の速さ
ay=-g; //y方向の加速度=-重力加速度
for(t=0; t<=10; t++)
{
if(y=0) //もしボールが床に着いたらcが増えていく
{
c=c+1;
while(c!=0)
{
a=a*0.8; //a=0.8^c
--c;
}
}
x=vx*t; //x方向:等速直線運動
vy=g*t*a; //y方向の加速度:vy=gt*0.8^c
y=vy*t-0.5*g*t*t; //投げ出して初めて床につくまでは鉛直投げ上げ運動の頂点からのスタートと考える
FillCircle(x,y,5,4); //(x,y)を中心とする半径4の赤色の球
}
SetCursorPos(10,10);
printf("Push Anykey!");
getch();
RestoreMode();
}