Visual C++のコンソールアプリケーションで、空気抵抗とマグナス力を様々に変えて
プログラム作った。当然数値を出力するだけ。0.5秒を50個に区切り、
その間のx座標(マウンドからの距離)、y座標(高さ。とりあえず2mにしておいた)
を求めた。発射角は水平で、実際のピッチングと違うが。
「ベースボールの物理学」と言う本を見たら、野球のボール程度の規模だと
空気抵抗は慣性抵抗で速度の2乗に比例するのが普通だが、その本のグラフ
を見たら速度の1次関数か、比例くらいが妥当かと思ったから勝手に比例式に
してしまった(スマソ
他にも、マグナス力の係数も粘性抵抗係数も何回か数値入れて適当に
改ざんしてしまった(0.5m先で15cmお辞儀して、)
初速は40m/sをx方向にのみとした。いろんなページや本でプログラム見たら
速度にcos掛けて解いているところが多いが。
まずプログラムのコードを載せる。変なところあったら推敲など頼む。
それから順々に、ジャイロとバックスピンの角度を変えて数値を載せていく。
後でそれ見て、誰かが数値を配列にしてJavaアプレットで
アニメーションにしてくれるかも知れない
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void runge_kutta(double (*)(double,double,double,double,double),
double (*)(double,double,double,double,double),
double (*)(double,double,double,double,double),
double (*)(double,double,double,double,double),
double,double,double,double,double,double,
double * ,double *,double *,double *);
double func1(double,double,double,double,double);
double func2(double,double,double,double,double);
double func3(double,double,double,double,double);
double func4(double,double,double,double,double);
void main()
{
int i,n;
double h,t,t0,tn,x,xx,y,yy,vx,vxx,vy,vyy;
char file_name [30] ="in.dat";
FILE *fp;
fp=fopen(file_name,"w");
if(fp==NULL){
printf("ファイルをオープンできません\n");
exit(1);
}
printf("===2階の常微分方程式の解法===\n");
printf("---諸元入力---\n");
printf(" t0= ");
scanf("%lf",&t0);
printf(" x0= ");
scanf("%lf",&x);
printf(" y0= ");
scanf("%lf",&y);
printf(" vx0= ");
scanf("%lf",&vx);
printf(" vy0= ");
scanf("%lf",&vy);
printf(" tn= ");
scanf("%lf",&tn);
printf(" n= ");
scanf("%d",&n);
h=(tn-t0)/n;
printf("---解析結果---\n");
printf("t x y");
for(i=0;i<=n;i++)
{
t=t0+i*h;
fprintf(fp," %12.8lf %12.8lf %12.8lf %12.8lf \n",t,x,vx,y);
runge_kutta(func1,func2,func3,func4,t,x,y,vx,vy,h,&xx,&yy,&vxx,&vyy);
x=xx;
y=yy;
vx=vxx;
vy=vyy;
}
fclose(fp);
}
void runge_kutta(double (*Func1)(double,double,double,double,double),
double (*Func2)(double,double,double,double,double),
double (*Func3)(double,double,double,double,double),
double (*Func4)(double,double,double,double,double),
double t,double x,double y,double vx,double vy,double h,
double *xx,double *yy,double *vxx,double *vyy)
{
double k11,k12,k13,k14,k21,k22,k23,k24,k31,k32,k33,k34,k41,k42,k43,k44;
k11=(*Func1)(t,x,y,vx,vy)*h;
k21=(*Func2)(t,x,y,vx,vy)*h;
k31=(*Func3)(t,x,y,vx,vy)*h;
k41=(*Func4)(t,x,y,vx,vy)*h;
k12=(*Func1)(t+h/2.0,x+k11/2.0,y+k21/2.0,vx+k31/2.0,vy+k41/2.0)*h;
k22=(*Func2)(t+h/2.0,x+k11/2.0,y+k21/2.0,vx+k31/2.0,vy+k41/2.0)*h;
k32=(*Func3)(t+h/2.0,x+k11/2.0,y+k21/2.0,vx+k31/2.0,vy+k41/2.0)*h;
k42=(*Func4)(t+h/2.0,x+k11/2.0,y+k21/2.0,vx+k31/2.0,vy+k41/2.0)*h;
k13=(*Func1)(t+h/2.0,x+k12/2.0,y+k22/2.0,vx+k32/2.0,vy+k42/2.0)*h;
k23=(*Func2)(t+h/2.0,x+k12/2.0,y+k22/2.0,vx+k32/2.0,vy+k42/2.0)*h;
k33=(*Func3)(t+h/2.0,x+k12/2.0,y+k22/2.0,vx+k32/2.0,vy+k42/2.0)*h;
k43=(*Func4)(t+h/2.0,x+k12/2.0,y+k22/2.0,vx+k32/2.0,vy+k42/2.0)*h;
k14=(*Func1)(t+h,x+k13,y+k23,vx+k33,vy+k43)*h;
k24=(*Func2)(t+h,x+k13,y+k23,vx+k33,vy+k43)*h;
k34=(*Func3)(t+h,x+k13,y+k23,vx+k33,vy+k43)*h;
k44=(*Func4)(t+h,x+k13,y+k23,vx+k33,vy+k43)*h;
x=x+(k11+2.0*k12+2.0*k13+k14)/6.0;
y=y+(k21+2.0*k22+2.0*k23+k24)/6.0;
vx=vx+(k31+2.0*k32+2.0*k33+k34)/6.0;
vy=vy+(k41+2.0*k42+2.0*k43+k44)/6.0;
*xx=x;
*yy=y;
*vxx=vx;
*vyy=vy;
}
double func1(double t,double x,double y,double vx,double vy)
{
return(vx);
}
double func2(double t,double x,double y,double vx,double vy)
{
return(vy);
}
double func3(double t,double x,double y,double vx,double vy)
{
return(-0.1*vx);
}
double func4(double t,double x,double y,double vx,double vy)
{
return(-9.8+0.22*vx);
}
0.5秒後に15pお辞儀して、速度が2m/sほど遅くなるかと思い、適当な数値を入れてしまった
ちょこまか計算して結果を出してみたが、バッターの手元の差がジャイロ最大でも50センチほど、
また0度をバックスピンとして、角度50度からはお辞儀しまくりになってしまった。
角度0度のとき(順に時間、マウンドからの距離、速さ、高さ)
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79920053 39.92007995 1.99979883
0.04000000 1.59680426 39.84031957 1.99919062
0.06000000 2.39281438 39.76071856 1.99816837
0.08000000 3.18723407 39.68127659 1.99672506
0.10000000 3.98006650 39.60199335 1.99485370
0.12000000 4.77131486 39.52286851 1.99254732
0.14000000 5.56098229 39.44390177 1.98979895
0.16000000 6.34907198 39.36509280 1.98660165
0.18000000 7.13558706 39.28644129 1.98294848
0.20000000 7.92053068 39.20794693 1.97883251
0.22000000 8.70390598 39.12960940 1.97424685
0.24000000 9.48571610 39.05142839 1.96918459
0.26000000 10.26596416 38.97340358 1.96363886
0.28000000 11.04465328 38.89553467 1.95760279
0.30000000 11.82178658 38.81782134 1.95106952
0.32000000 12.59736717 38.74026328 1.94403223
0.34000000 13.37139814 38.66286019 1.93648408
0.36000000 14.14388261 38.58561174 1.92841827
0.38000000 14.91482364 38.50851764 1.91982798
0.40000000 15.68422434 38.43157757 1.91070645
0.42000000 16.45208777 38.35479122 1.90104690
0.44000000 17.21841701 38.27815830 1.89084258
0.46000000 17.98321512 38.20167849 1.88008673
0.48000000 18.74648517 38.12535148 1.86877263
0.50000000 19.50823020 38.04917698 1.85689356
50全ては長いので、0.02秒ごとにした
バックスピンがジャイロ方向に10度傾いた時
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79927244 39.92726621 1.99976375
0.04000000 1.59709153 39.85466467 1.99905084
0.06000000 2.39345991 39.78219515 1.99785499
0.08000000 3.18838021 39.70985740 1.99616995
0.10000000 3.98185508 39.63765119 1.99398950
0.12000000 4.77388714 39.56557627 1.99130740
0.14000000 5.56447901 39.49363241 1.98811743
0.16000000 6.35363331 39.42181937 1.98441340
0.18000000 7.14135265 39.35013691 1.98018910
0.20000000 7.92763965 39.27858479 1.97543837
0.22000000 8.71249691 39.20716278 1.97015501
0.24000000 9.49592703 39.13587064 1.96433289
0.26000000 10.27793260 39.06470813 1.95796584
0.28000000 11.05851622 38.99367502 1.95104773
0.30000000 11.83768046 38.92277108 1.94357244
0.32000000 12.61542792 38.85199606 1.93553385
0.34000000 13.39176116 38.78134973 1.92692586
0.36000000 14.16668276 38.71083187 1.91774237
0.38000000 14.94019529 38.64044223 1.90797731
0.40000000 15.71230131 38.57018058 1.89762460
0.42000000 16.48300337 38.50004669 1.88667818
0.44000000 17.25230402 38.43004033 1.87513200
0.46000000 18.02020583 38.36016127 1.86298004
0.48000000 18.78671132 38.29040927 1.85021625
0.50000000 19.55182305 38.22078410 1.83683463
バックスピンがジャイロ方向に20度傾いた場合
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79933637 39.93365508 1.99969348
0.04000000 1.59734694 39.86742020 1.99877028
0.06000000 2.39403391 39.80129519 1.99722491
0.08000000 3.18939948 39.73527984 1.99505191
0.10000000 3.98344583 39.66937400 1.99224581
0.12000000 4.77617516 39.60357746 1.98880116
0.14000000 5.56758966 39.53789006 1.98471252
0.16000000 6.35769149 39.47231161 1.97997445
0.18000000 7.14648285 39.40684192 1.97458153
0.20000000 7.93396589 39.34148083 1.96852835
0.22000000 8.72014280 39.27622815 1.96180950
0.24000000 9.50501574 39.21108369 1.95441958
0.26000000 10.28858687 39.14604729 1.94635319
0.28000000 11.07085835 39.08111876 1.93760497
0.30000000 11.85183234 39.01629792 1.92816955
0.32000000 12.63151099 38.95158459 1.91804155
0.34000000 13.40989644 38.88697860 1.90721562
0.36000000 14.18699084 38.82247976 1.89568643
0.38000000 14.96279634 38.75808790 1.88344863
0.40000000 15.73731507 38.69380285 1.87049691
0.42000000 16.51054917 38.62962442 1.85682593
0.44000000 17.28250076 38.56555244 1.84243040
0.46000000 18.05317197 38.50158673 1.82730501
0.48000000 18.82256493 38.43772711 1.81144448
0.50000000 19.59068176 38.37397341 1.79484351
バックスピンがジャイロ方向に30度傾いた場合
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79940030 39.94004498 1.99957043
0.04000000 1.59760240 39.88017982 1.99827868
0.06000000 2.39460809 39.82040439 1.99612015
0.08000000 3.19041917 39.76071856 1.99309028
0.10000000 3.98503743 39.70112219 1.98918448
0.12000000 4.77846465 39.64161515 1.98439820
0.14000000 5.57070263 39.58219730 1.97872689
0.16000000 6.36175314 39.52286851 1.97216599
0.18000000 7.15161796 39.46362865 1.96471096
0.20000000 7.94029888 39.40447758 1.95635726
0.22000000 8.72779766 39.34541518 1.94710038
0.24000000 9.51411608 39.28644129 1.93693578
0.26000000 10.29925590 39.22755581 1.92585894
0.28000000 11.08321890 39.16875858 1.91386538
0.30000000 11.86600683 39.11004949 1.90095057
0.32000000 12.64762146 39.05142839 1.88711003
0.34000000 13.42806455 38.99289516 1.87233926
0.36000000 14.20733785 38.93444966 1.85663380
0.38000000 14.98544312 38.87609177 1.83998915
0.40000000 15.76238211 38.81782134 1.82240086
0.42000000 16.53815656 38.75963826 1.80386446
0.44000000 17.31276822 38.70154238 1.78437550
0.46000000 18.08621883 38.64353359 1.76392954
0.48000000 18.85851014 38.58561174 1.74252212
0.50000000 19.62964388 38.52777671 1.72014881
バックスピンより10cmくらい食い込んだが、10cm以上お辞儀している
書いていなかったが、
>>580の式でfunc3の係数更に1-(sinθ)/2を掛け、
func4のマグナス力にcosθを掛けている
バックスピンがジャイロ方向に40度傾いた場合
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79945625 39.94563698 1.99939459
0.04000000 1.59782597 39.89134783 1.99757589
0.06000000 2.39511065 39.83713248 1.99454023
0.08000000 3.19131176 39.78299080 1.99028393
0.10000000 3.98643077 39.72892271 1.98480334
0.12000000 4.78046916 39.67492810 1.97809477
0.14000000 5.57342839 39.62100687 1.97015458
0.16000000 6.36530992 39.56715893 1.96097910
0.18000000 7.15611523 39.51338416 1.95056470
0.20000000 7.94584578 39.45968249 1.93890773
0.22000000 8.73450302 39.40605379 1.92600454
0.24000000 9.52208841 39.35249799 1.91185151
0.26000000 10.30860342 39.29901497 1.89644500
0.28000000 11.09404950 39.24560463 1.87978140
0.30000000 11.87842809 39.19226689 1.86185708
0.32000000 12.66174066 39.13900164 1.84266842
0.34000000 13.44398864 39.08580877 1.82221183
0.36000000 14.22517349 39.03268820 1.80048369
0.38000000 15.00529665 38.97963983 1.77748040
0.40000000 15.78435956 38.92666355 1.75319838
0.42000000 16.56236367 38.87375927 1.72763403
0.44000000 17.33931041 38.82092689 1.70078376
0.46000000 18.11520123 38.76816632 1.67264400
0.48000000 18.89003754 38.71547745 1.64321118
0.50000000 19.66382080 38.66286019 1.61248171
実戦で使うのはこの辺りか?20センチ位沈むが、15センチは食い込んでくる
バックスピンがジャイロ方向に50度傾いた(ジャイロがバックスピンに
40度傾いた)とき
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79950420 39.95043074 1.99916593
0.04000000 1.59801764 39.90092291 1.99666188
0.06000000 2.39554153 39.85147643 1.99248504
0.08000000 3.19207710 39.80209122 1.98663264
0.10000000 3.98762559 39.75276721 1.97910189
0.12000000 4.78218820 39.70350433 1.96989002
0.14000000 5.57576617 39.65430250 1.95899425
0.16000000 6.36836071 39.60516164 1.94641181
0.18000000 7.15997304 39.55608167 1.93213994
0.20000000 7.95060438 39.50706253 1.91617586
0.22000000 8.74025594 39.45810413 1.89851682
0.24000000 9.52892895 39.40920641 1.87916006
0.26000000 10.31662460 39.36036927 1.85810283
0.28000000 11.10334412 39.31159266 1.83534238
0.30000000 11.88908871 39.26287650 1.81087595
0.32000000 12.67385959 39.21422071 1.78470081
0.34000000 13.45765794 39.16562521 1.75681422
0.36000000 14.24048500 39.11708993 1.72721343
0.38000000 15.02234194 39.06861480 1.69589572
0.40000000 15.80322999 39.02019974 1.66285835
0.42000000 16.58315033 38.97184468 1.62809860
0.44000000 17.36210417 38.92354954 1.59161374
0.46000000 18.14009271 38.87531425 1.55340106
0.48000000 18.91711714 38.82713874 1.51345784
0.50000000 19.69317866 38.77902292 1.47178136
ジャイロがバックスピン方向に30度傾いた時(これまでと逆)
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79954417 39.95442598 1.99891967
0.04000000 1.59817739 39.90890389 1.99567733
0.06000000 2.39590067 39.86343366 1.99027098
0.08000000 3.19271508 39.81801524 1.98269862
0.10000000 3.98862163 39.77264857 1.97295826
0.12000000 4.78362136 39.72733358 1.96104789
0.14000000 5.57771532 39.68207023 1.94696553
0.16000000 6.37090452 39.63685844 1.93070918
0.18000000 7.16319000 39.59169817 1.91227685
0.20000000 7.95457279 39.54658935 1.89166655
0.22000000 8.74505391 39.50153193 1.86887631
0.24000000 9.53463441 39.45652584 1.84390413
0.26000000 10.32331529 39.41157103 1.81674804
0.28000000 11.11109759 39.36666744 1.78740606
0.30000000 11.89798233 39.32181501 1.75587621
0.32000000 12.68397053 39.27701368 1.72215652
0.34000000 13.46906322 39.23226340 1.68624502
0.36000000 14.25326141 39.18756410 1.64813974
0.38000000 15.03656612 39.14291573 1.60783872
0.40000000 15.81897837 39.09831823 1.56533998
0.42000000 16.60049919 39.05377155 1.52064157
0.44000000 17.38112957 39.00927561 1.47374152
0.46000000 18.16087055 38.96483038 1.42463789
0.48000000 18.93972313 38.92043578 1.37332870
0.50000000 19.71768832 38.87609177 1.31981202
もうお辞儀しまくりでだめぽ
ジャイロからバックスピン方向に20度傾いた時
0.00000000 0.00000000 40.00000000 2.00000000
0.02000000 0.79957615 39.95762246 1.99863819
0.04000000 1.59830520 39.91528982 1.99455191
0.06000000 2.39618804 39.87300203 1.98773990
0.08000000 3.19322558 39.83075904 1.97820088
0.10000000 3.98941870 39.78856081 1.96593361
0.12000000 4.78476831 39.74640728 1.95093680
0.14000000 5.57927529 39.70429841 1.93320921
0.16000000 6.37294054 39.66223415 1.91274957
0.18000000 7.16576495 39.62021446 1.88955663
0.20000000 7.95774942 39.57823928 1.86362912
0.22000000 8.74889482 39.53630857 1.83496580
0.24000000 9.53920206 39.49442229 1.80356540
0.26000000 10.32867201 39.45258038 1.76942667
0.28000000 11.11730557 39.41078280 1.73254837
0.30000000 11.90510362 39.36902951 1.69292924
0.32000000 12.69206704 39.32732045 1.65056802
0.34000000 13.47819673 39.28565557 1.60546348
0.36000000 14.26349356 39.24403484 1.55761437
0.38000000 15.04795842 39.20245820 1.50701944
0.40000000 15.83159218 39.16092561 1.45367745
0.42000000 16.61439573 39.11943703 1.39758715
0.44000000 17.39636996 39.07799239 1.33874731
0.46000000 18.17751572 39.03659167 1.27715668
0.48000000 18.95783391 38.99523480 1.21281402
0.50000000 19.73732541 38.95392175 1.14571810
70cmもバックスピンよりお辞儀したので止め。
80度と完全ジャイロも求めたが、面倒なので書かない。