Cを使ってシミュレーションを行っているんですが、質問があります。
例えば、以下の内容を無限ループの中に入れていたとして、
ある一定の条件に達したものをループから外すにはどうしたらいいんでしょうかね。
ループから外れたものはもうそれ以降は完全に無視したいんですよね。
どうしたらいいでしょうか。
for(i=0;i<NUM;i++){
S[i].f = -m * g + F;
S[i].a = S[i].f / m;
S[i].v = S[i].v + S[i].a * dt;
S[i].p = S[i].p + 0.5 * S[i].a * dt * dt + S[i].v * dt;
}
例えばこれで、S[i].p が一定の位置に来た場合、
それ以降、その存在を無視する。みたいな感じにしたいんです。
よろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
ANo.4 = Interest です。
「リスト構造」が分からないということでしょうか。リスト構造は「アルゴリズムとデータ構造」を学ぶと必ず出てきます。
例えば、
http://www.geocities.jp/ky_webid/algorithm/index …
の第10章にで扱っている「線形リスト」がそれです。
構造体、ポインタ、メモリ管理などの知識が必要になります。(やりながら覚えるという手もありますね。)
自己参照というテクニックが出てきます。リスト構造はデータ構造の最も基本的なものの一つです。
S と SList を別けて書いたのは、私が最近 Java を使っている影響です。いまsosohohoさんがお使いの S構造体に一切手を加えなくて済むスマートな手です。保持したいデータの構造体とリスト処理のための構造体を切り分けることでメンテナンス性をよくする狙いがあります。
SList_size(list) はリストの要素数を返す関数
SList_get(list, i) はリストから i 番目の要素を取り出す関数
SList_remove(list, i ) はリストから i 番目の要素を削除する関数
として書きました。これらは全部自作する必要があります。
後は具体的にどこがわからないでしょうか?
この回答への補足
時間をかけて読んではみたのですが…いまいち全体的にちんぷんかんぷんです…。
すみません…。
具体的にどのように書けばいいのかを教えていただければ幸いです。
No.4
- 回答日時:
話が進展しないようですので、ちょっとでしゃばってみます。
私なら、リスト構造を使って、いらなくなったら削除しちゃうかもしれません。例えば、
S *s;
SList *list;
を定義しておき、
for(i=0; i< SList_size(list); i++){
s = SList_get(list, i);
S_update( s ); /* ここで力、加速度、速度、位置を更新する。*/
if( s->p が範囲外 )
SList_remove(list, i );
}
SList は S構造体をリストとして扱うための構造体として定義します。
こんな感じでいかがでしょうか?
この回答への補足
ありがとうございます。
ただ、私、プログラミングに関する知識が乏しいものでして・・・。
もう少し詳しく説明していただけると幸いです。。。
No.3
- 回答日時:
#1の解凍はちょっと勘違いだったようですので無視してください
>消滅したとみなしたいんですよ
消滅となるとS[i]の中身をすべて前送りしてデータを消す必要がありますよ。そうなると複雑な構造になります。
S[i]にあらたに判断用の配列S[i].xとかを作ってゼロクリアをしておいて
無視する物にはこの配列に1を入れてfor(i=0;i<NUM;i++){処理}文が終わった後で改めて配列を整理するようにしてはどうでしょう。
No.2
- 回答日時:
if文で判定すれば、一定の位置に来るまではS[i].pの値を処理できます。
こういう事をしたいのですよね!?for(i=0;i<NUM;i++){
S[i].f = -m * g + F;
S[i].a = S[i].f / m;
S[i].v = S[i].v + S[i].a * dt;
if(S[i].p < 一定の位置)
{
S[i].p = S[i].p + 0.5 * S[i].a * dt * dt + S[i].v * dt;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- 物理学 雨滴の落下問題 6 2023/07/16 09:39
- ノートパソコン Windows10(?).pcを修復できませんでした の無限ループ PC無知で、アドバイスお願い致し 5 2022/06/26 16:24
- Java Java 南京錠 2 2023/02/04 11:46
- 物理学 物体に一定の大きさfの力をx軸の正の向きに加える。またこの物体には抵抗係数がγの速度に比例する抵抗力 2 2023/07/06 04:01
- 物理学 相対論的運動方程式 1 2022/07/04 06:20
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- 数学 x=r・cosθの2回微分 θ=ωtとすると? 5 2022/05/10 23:53
- 数学 f(x)=2x+∮(0~1)(x+t)f(t)dt を満たす関数f(x)を求めよ。 3 2022/07/05 22:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
二次元配列における要素数のは...
-
perlで2次元配列をサブルーチ...
-
可変長配列を、動的確保した固...
-
マクロ Publicでの配列定義
-
Excel VBA ユーザーフォームの...
-
2次元配列or複数回のファイル読...
-
配列を初期化する時ってどうす...
-
Strawberry Perl for Windows ...
-
fortran
-
perl qw(aaa bbb ccc)[$hoge]...
-
文字列の分割について
-
ファイル名に日付・時刻を付与...
-
エクセルVBAでTransposeの不思議
-
Dim flag(4) as boolean で配列...
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
vba
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列のインデックスについて
-
VBAのautofilter、criteriaの配...
-
Excel VBA ユーザーフォームの...
-
二次元配列における要素数のは...
-
マクロ Publicでの配列定義
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
エクセルVBAでTransposeの不思議
-
perlで2次元配列をサブルーチ...
-
perlで配列の要素が空なのを知...
-
perl 配列の要素数について
-
組み合わせについての質問です...
-
隣同士の数字を足し合わせる
-
複数の配列の全ての組み合わせ...
-
perl 初等プログラミングについて
-
jcode->jfold で禁則処理
-
一致する要素が格納されている...
-
チェックボックスのperlでの値...
おすすめ情報