2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

暇人素人の趣味レーション

1 :名無しさん@3周年:04/02/16 21:00
高校物理程度の知識で大まかな推測しても、ちょっと条件複雑にすると
「それって解析解出せないからコンピュータシミュレーションしないとダメじゃん」
と言われることが結構多い

エクセルやらVBAやらBCCやらが普及しても、テクニカルな部分で
どんな変数をどの辺で使うか、変数の有効範囲はどの間かが
ど素人には分からず、勉強に一苦労だったりする

というわけで、素人でも(誤差とかは当分無視して)数値をある程度の根拠に
基きいじって楽しむスレ欲しいなと思って、立ててみますた

2 :名無しさん@3周年:04/02/17 04:58
#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");

3 :名無しさん@3周年:04/02/17 04:59
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);
}

4 :名無しさん@3周年:04/02/17 05:00
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;

5 :名無しさん@3周年:04/02/17 05:02
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.004*vx*vx);
}
double func4(double t,double x,double y,double vx,double vy)
{
return(-9.8+0.22*vx);

6 :名無しさん@3周年:04/02/17 05:11
ボールの軌道がどの位か、空気抵抗のある所でどのくらい飛ぶかとか
調べてたら2ちゃん過去ログでこんなの引っ掛かって来た
しかしこれだと1流投手の球が本来到達する高さより70cmも伸びるとか
抵抗係数がやたら低いとかになるけど、こんな値で良いのかな?

遠投のほうはVBやJAVAで書いたのがあちこちにあるけど

7 :名無しさん@3周年:04/02/17 05:22
VBで遠投をシミュレートする方法を調べた。ボタン5つにテキストボックス8つ配置、あとタイマー

Dim t, dt, ax, ay, vx, vy, v, x, y, xF, yF, xL, yL, g, Pi, theta, k1, k2, H, red, white

Private Sub Command1_Click()
Timer1.Interval = 1
Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
Timer1.Enabled = False
End Sub

Private Sub Command3_Click()
t = 0: x = 0: y = 0: H = 0:
v0 = Val(Text1.Text)
theta = Val(Text2.Text)
k1 = Val(Text3.Text)
k2 = Val(Text8.Text)
dt = Val(Text4.Text)
theta = theta * Pi / 180
vx = v0 * Cos(theta)
vy = v0 * Sin(theta)
xF = 150 + 3 * x: yF = 350 - 3 * y
Timer1.Enabled = True
End Sub

Private Sub Command4_Click()
Form1.Cls
Zahyo
End Sub

8 :名無しさん@3周年:04/02/17 05:23
Private Sub Command5_Click()
End
End Sub

Private Sub Form_Load()
Form1.Cls
Form1.ScaleMode = 3
Form1.AutoRedraw = True
g = 9.8: Pi = 3.14159
v0 = 70: Text1.Text = v0
theta = 45: Text2.Text = theta
k1 = 0.01: Text3.Text = k1
k2 = 0.04: Text8.Text = k2
dt = 0.02: Text4.Text = dt
theta = theta * Pi / 180
vx = v0 * Cos(theta)
vy = v0 * Sin(theta)
v = v0
red = QBColor(12)
white = QBColor(15): BackColor = white
xF = 150 + 3 * x: yF = 350 - 3 * y
Zahyo
End Sub

9 :名無しさん@3周年:04/02/17 05:28
Private Sub Timer1_Timer()
t = t + dt
ax = -k1 * v * vx
ay = -g - k1 * v * vy + k2 * vx
vx = vx + ax * dt
vy = vy + ay * dt
x = x + vx * dt
y = y + vy * dt
xL = 150 + 3 * x: yL = 350 - 3 * y
Form1.Line (xL, yL)-(xF, yF), red
v = Sqr(vx ^ 2 + vy ^ 2)

If y > H Then
H = y
Text7.Text = Int(H + 0.5) & "m"
End If

Text5.Text = 0.01 * Int(100 * t + 5) & "s"
Text6.Text = Int(x + 0.5) & "m"
xF = xL: yF = yL
If y <= 0 Then Timer1.Enabled = False

End Sub

'オイラー法でスマソ
'VBでルンゲクッタで描画させるとやたら遅いと知った
'速度の2乗に比例する抵抗はともかく、速度に比例するマグナス力はどうか?
'実際には120〜150km/hの野球ボールで、マグナス力はむしろ120km/hの方が大きくなったりするらしい
'(乱流が出来る出来ないの境目のため)

10 :名無しさん@3周年:04/02/17 05:30
Private Sub Zahyo()
Form1.Line (150, 350)-(650, 350)
Form1.Line (150, 40)-(150, 350)
CurrentX = 140: CurrentY = 370: Print "O"
CurrentX = 640: CurrentY = 335: Print "x"
CurrentX = 155: CurrentY = 60: Print "y"
For i = 0 To 16
Form1.Line (150 + 3 * 10 * i, 350)-(150 + 3 * 10 * i, 360): Next i
For i = 0 To 3
Form1.Line (150 + 3 * 50 * i, 350)-(150 + 3 * 50 * i, 365), red
CurrentX = 145 + 3 * 50 * i: CurrentY = 370: Print Format(50 * i, "###")
Next i
For i = 0 To 10
Form1.Line (150, 350 - 3 * 10 * i)-(140, 350 - 3 * 10 * i): Next i
For i = 0 To 2
Form1.Line (150, 350 - 3 * 50 * i)-(135, 350 - 3 * 50 * i), red
CurrentX = 114: CurrentY = 345 - 3 * 50 * i: Print Format(50 * i, "###")
Next i
End Sub

'描画したときの座標。こんなのも作った人はこつこつ大きさ合わせとかするので大変か

11 :名無しさん@3周年:04/02/17 05:32
http://hollys-web.hp.infoseek.co.jp/ball.htm
http://homepage3.nifty.com/qazu/parabola.htm

野球でも完璧に打ち返したピッチャー返しとかは時速200km
超えている可能性もある

12 :名無しさん@3周年:04/02/17 05:52
抵抗を考慮した遠投のシミュレーションをやると、最長飛距離を出すのが45度でなく35度とかに
なるのは勿論だが、空気抵抗0.008(>>11の下のリンク先に
ある数値)を入れたとたんに、初速40m/sの剛速球が遠投90mに
なってしまう。

>>2-5では抵抗0.004と半分だが、縫い目のお陰で抵抗が減っているのかな
>>2-5と同じ係数でやると、飛距離が爆発的に伸びてしまう。
>>11上のリンク先に別のシミュレート結果があるが、僅か13cmしかホップしていない
松坂は本来の落差より80cmも伸びると言われているのに何故か?

>>11上に「ベースボールの物理学」という本が紹介されている。漏れも持っているが
これにも「遠投は145キロの初速でも95m」と書かれている。120mの遠投は170km/hの初速が
必要との事。
これが当てはまる程度の係数は、k1=0.008、k2=0.065と、>>2-5の数値より随分小さい

かつて西武の羽生田選手は、落球しかけてフェンス際からホームまで真っ直ぐ投げ返した
と言われている。角度10度で初速190km/hくらい(遠投130mクラス)なら、この位飛ぶらしい。

助走を付けられる野手の遠投の速度は想像以上に大きい

13 :名無しさん@3周年:04/02/17 06:02
>>11上のサイトにも、アメリカで30rpsのボールが70cmお辞儀して
日本人が計算したら40rpsのボールが5cmしかお辞儀しない例が書いてある。

テニスのサーブも240km/h以上出るが、テニスボールは30g強と軽く
その割に直径は野球ボールと大差ないので、空気抵抗ははるかに大きい。
テニスコートは対角線が27m程度、ボールが約30g直径6.6cm
野球はマウンドホーム間18.44m、ボールは140g7.5cm
http://homepage1.nifty.com/tateyan/mame_jiten/court_ball.htm
ボールの重さが軽いほど空気中で多くの運動量が奪われる。
また直径が大きいほど抵抗が大きい。
野球のボールの抵抗係数が0.008というので、140/30倍した後
(6.6/7/5)^2倍した抵抗係数0.028を使った

これを減速を考慮できるプログラムで計算した所、初速が秒速70mで
高さ3mから打たれたテニスボールが27m飛ぶのに掛かる時間は
0.7秒。平均速度は140km/hも無かった

とはいっても、ホームベースだけでなく広いコート内にその速度の
球が飛んで来るのを相手コート内に撃ち返すのは相当難しい。

14 :名無しさん@3周年:04/02/17 06:11
37 名前:名無しさん@4周年 投稿日:04/02/13 12:48 ID:XJloBXwc
野球のバットのボールの間の反発係数は0.44と聞いた。

でも上に軽く投げ上げただけのノックで、思い切りボール叩いて
ボンズが180キロの打球とか打っているのは何故?ボンズのスイング速度
160キロ位だから160×0.44=70キロくらいって考えたくなるけど

ひょっとして70+(バット振り終わり後の相対速度)とか?
42 名前:名無しさん@4周年 投稿日:04/02/14 09:03 ID:KXW3CIFC

>>37

反発係数 = -(衝突後の相対速度)÷(衝突前の相対速度)

なので、バットとボールがぶつかった直後バットが静止するわけではないので
v1:衝突前のバットの速度
v2:衝突前のボールの速度 (仮に0とする)
v'1:衝突後のバットの速度  (仮にv1=v'1=160とする)
v'2:衝突後のボールの速度
とすれば

0.44=−(v'1-v'2)÷(v1-v2) に代入すると
v'2=230km/hぐらいになるはず。

あくまでも高校物理での話。
________________________
こんなやり取りがあった。140km/hの球を打った場合もノック同様160km/hスイングが
110km/hに減速するとしても飛距離150mのホームランは初速250km/h以上も出て、
野球はテニスやゴルフと並ぶ、球速の速いスポーツと言える。
これは>>7-10でk1=0.008、k2=0.04などにした場合に近い。

15 :名無しさん@3周年:04/02/21 11:59
>>12
>空気抵抗0.008(>>11の下のリンク先に
ある数値)を入れたとたんに、初速40m/sの剛速球が遠投90mに
なってしまう。

>落球しかけてフェンス際からホームまで真っ直ぐ投げ返した
と言われている。角度10度で初速190km/hくらい(遠投130mクラス)

松井が読売時代に低弾道でスタンドまで飛ばしたが、その時間は
3.3秒。
射出角15度、初速58m/s、空気抵抗0.008、マグナス力比例定数
0.065とした時に、112mを3.3秒ほどと計算される。フルスイングの
芯で捕らえたライナーは200km/s超えるのは確かか
このくらいの速度で、35度の射出角だと140mくらい飛ぶ。松井の良い当たりの
ホームランがその位

TBSの外野手遠投の的当てで、80m先に届かない人が結構いたらしい。
思い切り助走つけるならともかく、正確さを期して助走も減らして上半身中心に
投げた場合、角度をつけて初速125km/h(遠投80m)超えるのは
かなり難しいということになる
(空気抵抗0.008、マグナス力比例定数0.065として)

16 :名無しさん@3周年:04/02/21 12:19
東京ドームの気圧は、外よりも0.3%強くして天井を支えているという。
これがボールの飛距離にどう影響するか

東京ドーム完成当時の読売の主力である原の打球を初速162km/h、
射出角は35度(38度や40度も試した)、抵抗係数は0.008、マグナス力定数は
0.065を使った。

そしてドーム内で更に0.3%気圧が高いと考えるのだが、殆ど差が出ない。
それで抵抗は0.0081、マグナス力定数は0.07などにした。
まあ両定数とも、気圧に比例して増減する筈である。

結果は上げようと下げようと108mのまま(1m未満で変化はあるようだが)。
こんな僅かな気圧変化ではホームランの飛距離に差は出ない。
またボールの回転が余程速い人でもない限り、普通気圧が高いほど
飛距離が落ち、気圧が下がるほど飛距離が伸びるであろう。
マグナス力の項の比例定数を通常の9倍の0.6付近にしても、空気抵抗の項
共々1.1倍にしたら飛距離が落ちるだけだった。

気圧調整でドームランとやらを作るのは難しいと思われる。もっとも空調説は
否定できないが

17 :名無しさん@3周年:04/02/28 23:44
gnuplotをぐにゅぷろっとと読んでいた

18 :名無しさん@3周年:04/03/14 22:58
500gのリング型ダンベルをキャッチボール並の腕の振りで振ることは、
慣れればそんなに難しくない

旧日本軍の手榴弾は、ほぼ球形で直径5cm、重さ500gだったという。
空気抵抗は重さが3倍以上で、表面積が半分(5/7)^2が約1/2だから、
抵抗係数を1/6にしたら十分だろうか

初速が秒速30mで、この速さで打ち出したときの飛距離を>>7-10でシミュレートすると、
抵抗が少ない分45度で最長になったが(バックスピンのマグナス力は無しとした)、
83mも飛んだ。青田はこの速度で手榴弾を投げられた事になる

16 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)