C++における鉛直投げ上げ+反射のプログラム
Posted: 2012年9月25日(火) 14:11
はじめまして。
この度C++の勉強を始めて、グラフィック処理でのプログラムを組んでいるのですがどうしても行き詰ったので質問させていただきます。
プログラムとしては指定した場所から指定した初速度(y方向、x方向)で球を投げ上げ、重力加速度により落ちていき、そのあとは反発係数を指定してバウンドしていくというものにしたいと思っています。
投げあげてから重力加速度に従って球が落ちるところまではできたのですが、その先どのように球を反発させればよいかがわかりません。
ifを使ってどうにかしようとはしたのですがうまくいかないのでご教授願えたらと思います。
この度C++の勉強を始めて、グラフィック処理でのプログラムを組んでいるのですがどうしても行き詰ったので質問させていただきます。
プログラムとしては指定した場所から指定した初速度(y方向、x方向)で球を投げ上げ、重力加速度により落ちていき、そのあとは反発係数を指定してバウンドしていくというものにしたいと思っています。
投げあげてから重力加速度に従って球が落ちるところまではできたのですが、その先どのように球を反発させればよいかがわかりません。
ifを使ってどうにかしようとはしたのですがうまくいかないのでご教授願えたらと思います。
float xo,yo,u,r,gy,dt;
Graphics^ gr;
Brush^ br;
Brush^ brwhite;
Pen^ p1;
Pen^ p2;
Pen^ p3;
float t,xt,yt,vx,vy,vx0,vy0,g,a,h;
//グラフィック環境設定とパラメータの読み込み
void InitGraph(){
gr=pictureBox1->CreateGraphics();
p1=gcnew Pen(Color::Blue,1);
brwhite=gcnew SolidBrush(Color::White);
xo=150;
yo=300;
u=10;
//ビルの大きさを指定する
a=Convert::ToSingle(textBox1->Text);
h=Convert::ToSingle(textBox2->Text);
//初速度を指定する
vx0=Convert::ToSingle(textBox3->Text);
vy0=Convert::ToSingle(textBox4->Text);
//重力加速度を指定する
g=9.8;
//球の半径を指定する
r=0.1;
//微小時間を指定する
dt=0.05;
}
//座標軸を描く
void Drawaxis(){
float gx,gy;
gr->FillRectangle(brwhite,0,0,500,400);
gr->DrawLine(p1,xo-3*u,yo,xo+20*u,yo);
gr->DrawLine(p1,xo,yo-25*u,xo,yo+5*u);
//ビルを描く
gr->DrawRectangle(p1,xo,yo-h*u,a*u,h*u);
}
void ball(float x,float y,float r,int c){
float gx,gy,rr;
gx=xo+x*u;
gy=yo-y*u;
rr=u*r;
if(c==1){
br=gcnew SolidBrush(Color::Blue);
}else{
br=gcnew SolidBrush(Color::White);
}
gr->FillEllipse(br,gx-0.5*rr,gy-0.5*rr,rr,rr);
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
InitGraph();
Drawaxis();
t=0;
timer1->Enabled="True";
}
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
ball(xt,yt,0.7,0);
t=t+dt;
xt=a+vx0*t;
yt=h+vy0*t-0.5*g*t*t;
ball(xt,yt,0.7,1);
}
};
}