C言語初心者です!詳しい方教えて下さい!
以下のソースコードは野球のピッチングで投げてからキャッチャーに届くまでの軌道を出力するもので、応用すればゴルフでボールを打ってから停止するまでの同様な数値が出力される。と言われて渡されたのですが、どこを変更すればいいのかわかりません。
変更したい数値は ボールの重さ、大きさ、発射角度、初速度 と 揚力係数 です。
void
force(float cl, float cy, float cd, float ut, float vt, float wt,
float *fx, float *fy, float *fz)
{
float g=9.8, rho=1.225, S=0.0042;
float q, uv;
q = sqrt(ut*ut + vt*vt + wt*wt);
uv = sqrt(ut*ut + vt*vt);
*fx = -0.5*rho*S*q*q*(ut/q*cd+vt/uv*cy+wt/q*ut/uv*cl);
*fy = -0.5*rho*S*q*q*(vt/q*cd-ut/uv*cy+wt/q*vt/uv*cl);
*fz = -MASS*g-0.5*rho*S*q*q*(wt/q*cd-uv/q*cl);
}
void
integra(float cl, float cy, float cd,
float *xt, float *yt, float *zt, float *ut, float *vt, float *wt,
float dt)
{
float u1, v1, w1, u2, v2, w2, fx, fy, fz;
force(cl, cy, cd, *ut, *vt, *wt, &fx, &fy, &fz);
u1 = *ut + fx*dt/MASS;
v1 = *vt + fy*dt/MASS;
w1 = *wt + fz*dt/MASS;
force(cl, cy, cd, u1, v1, w1, &fx, &fy, &fz);
u2 = 0.5*(u1 + *ut + fx*dt/MASS);
v2 = 0.5*(v1 + *vt + fy*dt/MASS);
w2 = 0.5*(w1 + *wt + fz*dt/MASS);
*xt += 0.5*dt*(*ut + u2);
*yt += 0.5*dt*(*vt + v2);
*zt += 0.5*dt*(*wt + w2);
*ut = u2;
*vt = v2;
*wt = w2;
}
int
main()
{
float x[256], y[256], z[256];
int i;
float dt=0.01;
float dis=18.44;
float cy, cl, cd=0.5;
float xt, yt, zt, ut, vt, wt, us;
float va, la;
int white[3] = {255, 255, 255};
int red [3] = {255, 0, 0};
int green[3] = { 0, 255, 0};
int blue [3] = { 0, 0, 255};
int grey [3] = { 64, 64, 64};
int j;
float ye[10], ze[10];
float yst[5] = {-0.215, 0.215, 0.215, -0.215, -0.215};
float zst[5] = {0.5, 0.5, 1.2, 1.2, 0.5};
sleep(1);
for (j=0;j<10;j++) {
xt = 0.0, yt=0.0, zt=1.8;
printf("初速度(~150)km/h==>");
scanf ("%g", &us);
if (us<=0.0) exit(0);
us = us*1000.0/3600.0;
printf("上下角(-5~5)(deg.)==>");
scanf ("%g", &va);
va = va*PI/180.0;
printf("左右角(-5~5)(deg.)==>");
scanf ("%g", &la);
la = la*PI/180.0;
ut = us*cos(la)*cos(va);
vt = us*sin(la);
wt = us*cos(la)*sin(va);
printf("CL(-1~1)==>");
scanf ("%g", &cl);
printf("CY(-1~1)==>");
scanf ("%g", &cy);
printf("t x t z\n");
for (i=0; xt<=dis; i++) {
x[i] = xt;
y[i] = yt;
z[i] = zt;
integra(cl, cy, cd, &xt, &yt, &zt, &ut, &vt, &wt, dt);
printf("%g %g %g %g\n", dt*(float)(i+1), xt, yt, zt);
}
ye[j] = yt, ze[j] = zt;
}
}
お礼
出来ましたーっ!!! データを得るときはconst char* nで得て、それをstrcpyでメンバーにコピーする必要があったのですね。 数値を扱うのは簡単なのに文字列ではいつも苦労します。もっともっと勉強します。 名前の"小泉"には少し笑ってしまいました。(笑) ありがとうございました!!