放物線

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ヤッキー

放物線

#1

投稿記事 by ヤッキー » 13年前

放物線を作りたいのですが
時間 | 0 1 2  3  4  5  6  7 8 9 10
座標 | 0 5 9 12 14 15 14 12 9 5  0
移動量|  0 5 4 3 2 1  -1  -2  -3 -4 -5 0

この表のように物体が動くプログラムをどのように作ればいいかわかりません。
お願いします。

ヤッキー

Re: 放物線

#2

投稿記事 by ヤッキー » 13年前

間違えました。

時間 | 0 1 2  3  4  5  6  7 8 9 10
座標 | 0 5 9 12 14 15 14 12 9 5  0
移動量|  0 5 4  3  2  1  -1  -2  -3 -4  -5

初級者
記事: 200
登録日時: 13年前

Re: 放物線

#3

投稿記事 by 初級者 » 13年前

時間と移動量との関係式を見つけてみましょう。

# 放物線にはならないと思うけど。

アバター
a5ua
記事: 199
登録日時: 13年前

Re: 放物線

#4

投稿記事 by a5ua » 13年前

参考までに、ヒントになりそうなコードをC言語で示します。

コード:

#include <stdio.h>

int main(void)
{
	int t;	// 時間
	int x;	// 座標
	int v;	// 移動量
	
	x = 0;	// 初期位置を設定する
	/* (1) 初期移動量を設定する */
	
	// 初期値を表示する
	printf("%d %d %d\n", t, x, v);
	
	for (t = 0; t <= 10; t++) {
		// 座標を更新する
		x += v;
		
		/* (2) vを変化させる */
		
		/* (3) 必要に応じて、x, vを補正する*/
		
		// 現在の値を表示する
		printf("%d %d %d\n", t, x, v);
	}
	return 0;
}

アバター
GRAM
記事: 164
登録日時: 13年前
住所: 大阪

Re: 放物線

#5

投稿記事 by GRAM » 13年前

放物線というよりかは鉛直投げ上げに近いのですかね?
(表の座標が上向きの方向、つまりy座標になった場合)

放物線にするには横方向に等速に動かせばよいでしょう。

物体の動きをプログラミング言語で記述するには主に2つの方法があります
①ある時刻の物体の位置を数学的に割り出す
②物理的にシュミレーションする

前者の方法は等加速度運動の法則
y=V0t - 1/2 a t2 (ここでV0は初速度(ここでは5)、aは加速度(ここでは-1)、tは時間です)

・・・を使えばよいでしょう


後者の方法はもうちょっと直感的です
つまりtが1進むごとに
(i)まず速度からから1を引き
(ii)それから現在の位置に速度を足す

を繰り返すことです
この場合も速度は初め5になるでしょうね

どちらにしても鉛直投げ上げを実現できます(後者の方がプログラムっぽい感じですが)

maru
記事: 150
登録日時: 13年前

Re: 放物線

#6

投稿記事 by maru » 13年前

初級者 さんが書きました:時間と移動量との関係式を見つけてみましょう。

# 放物線にはならないと思うけど。
確かに放物線にはなりませんねぇ。
ヤッキー さんが書きました:移動量|  0 5 4  3  2  1  -1  -2  -3 -4  -5
まず、移動量は次の座標との差だから、先頭の0は無視します(と言うか、移動量は間に書くべき)
そうするとこの移動量はその間の平均速度ということになります。
そして、その平均速度の差を求めると加速度が求まります。
で、加速度を求めると
-1 -1 -1 -1 -2 -1 -1 -1 -1
となって、一定になっていないことが分かります。
これは「一定の加速度(普通は重力)」の元で運動する物体の動きである放物線にはなりえません。

さて質問の
ヤッキー さんが書きました:この表のように物体が動くプログラムをどのように作ればいいかわかりません。
お願いします。
ですが、すでにGRAM さんが書かれているように、
GRAM さんが書きました:物体の動きをプログラミング言語で記述するには主に2つの方法があります
①ある時刻の物体の位置を数学的に割り出す
②物理的にシュミレーションする
という手法で記述することが出来ますね。
今回の場合で二つの方法を比べてみると、
①ある時刻の物体の位置を直接計算できるが、計算量が大きい
②ある時刻の物体の位置は前の時刻の位置が分からないと計算できないが、計算量は少ない
という特徴があります。この特徴を考慮に入れてどちらの方式を選ぶかを考えると、②の方法、つまりa5ua さんのプログラムを使うべきだということが分かります(つまり②の方が計算量が少ない=早く計算が終わる)。

ここからは脱線。
物体の動きをプログラミングで記述する際に、「ある時刻の物体の位置を数学的に割り出す」ことが出来ないと言うことが多々有ります。たとえば3体問題とか。そういう場合は②のシミュレーションしか出来ませんが、実際にシミュレーションする場合、微分方程式を解くことになるので、ルンゲ・クッタなどのアルゴリズムを使用しないと誤差が発生し、実用にならないことがありますのでご注意ください。
# a5ua さんのプログラムはオイラー法による微分方程式の解法になりますが、今回は誤差が発生しません。

閉鎖

“C言語何でも質問掲示板” へ戻る