改め Objective Technician

はぐれ技術者のやりたい放題

ヨーヨーパート始動

2006-11-03 15:47:40 | 陸上競技
11月3日(Fri) 評定 快晴 暖

jog
ストレッチ
ランニングドリル7種

150m流し×3本

200m-100m
24"0-11"9

振り上げ特訓

Mりちゃんとヨーヨー

c-down



この前の、100m走の風と記録の関係式について、いちいち関数電卓で式を入力するのは面倒なので、Cでプログラムを書いた。


100m加速走のタイム、30mSDのタイム、体重、を入力すると、もしも風が違ってた場合にそれと同じ走りをしたらどのくらいの記録になるかを、-2.5[m/s]から+2.5[m/s]まで0.1[m/s]刻みで表示する。


以下はソースコード

#include <stdio.h>
#include <math.h>

int main(void)
{
  float time,weight,SD,wind,T,v,f,a;

  printf("100m加速走のタイム?(無風と仮定)¥n");
  scanf("%f",&time);
  
  printf("30mSDのタイム?¥n");
  scanf("%f",&SD);

  printf("体重?¥n");
  scanf("%f",&weight);

  printf("風[m/s] , 100m加速走の記録[s] , 無風のときとの差[s]¥n");

  v=100/time;
  f=weight*v/SD;
  a=(f-0.2744*pow(v,2))/pow(v,2);

  for(wind=-2.5;wind<=2.5;wind+=0.1){
    T=100*(wind*0.2744-sqrt(pow(0.2744*wind,2)-(a+0.2744)*
(0.2744*pow(wind,2)-f)))/(0.2744*pow(wind,2)-f);
    printf("%7.1f , %7.2f , %7.2f¥n",wind,T,T-time);
  }

  return 0;
}




それでも、良く考えたら一番知りたいのは『うまく走れたのに風のせいで参考記録になってしまった。公認だったらどのくらいだろう。』ってことだと思うので、プログラムをちょっと改造してそれが出力できるようにした。


アイディアとしては、スタートから30mを空気抵抗を受けない等加速度として30mSDの記録をそのまま使い、あと70mは等速と仮定してこのまえ導出した式を使う。

実際の記録から30mSDのタイムを引き、この式

time-30mSD=70(wb-√{(wb)^2-(a+b)(bw^2-f)})/(bw^2-f) [s]

から a を求める。
f , bの求め方は前と同じで、wは実際に走ったときの風を代入。

で、こんどはwを変数として70mをどのくらいで走れるか計算し、30mSDのタイムをつなげる。


これをプログラムでかくとこんな。



#include <stdio.h>
#include <math.h>

int main(void)
{
  float time,weight,SD,wind,T,v,f,a;

  printf("100m加速走のタイム?(無風と仮定)¥n");
  scanf("%f",&time);
  v=100/time;

  printf("30mSDのタイム?¥n");
  scanf("%f",&SD);

  printf("体重?¥n");
  scanf("%f",&weight);

  printf("100m走の記録?¥n");
  scanf("%f",&time);

  printf("そのときの風?¥n");
  scanf("%f",&wind);

  f=weight*v/SD;
  a=-0.2744+(pow(0.2744*wind,2)-pow(0.2744*wind-(time-SD)
*(0.2744*pow(wind,2)-f)/70,2))/(0.2744*pow(wind,2)-f);

  printf("風[m/s] , 100m走の記録[s] , 実際の記録との差[s]¥n");
  for(wind=-2.5;wind<=2.5;wind+=0.1){
    T=70*(wind*0.2744-sqrt(pow(0.2744*wind,2)-(a+0.2744)
*(0.2744*pow(wind,2)-f)))/(0.2744*pow(wind,2)-f)+SD; 
    printf("%7.1f , %7.2f , %7.2f\n",wind,T,T-time);
  }
  return 0;
}


100m加速走のタイム、30mSDのタイム、体重、100mの記録、そのときの風を代入すると、風が違ってた場合の100mの記録を、-2.5から+2.5[m/s]まで0.1刻みで表示する。


(注!)
どっちのプログラムも、数学関数を使うのでヘッダファイルmath.hをインクルードする必要がある。

コンパイルするときに -lm を付け足すのを忘れないでね。