■56270 |
Re[8]: cからVB6に移植お願い |
□投稿者/ 魔界の仮面弁士 -(2011/01/07(Fri) 11:11:31)
| 2011/01/07(Fri) 11:12:48 編集(投稿者) ■No56264 (かめ さん) に返信 >> cからVB6に移植お願い >> 分類:[C#] C# と C と C++ は別の言語ですよ。 今回の場合、分類として [C#] を選択するのではなく、 [C/C++]、[VB6 以前] あたりの方が良かったかも。
>> Private Sub Command1_Click() >> CalcKeplar 'TLE→Pos,Vel >> RVel Pos, Vel 'Pos,Vel→TLE >> End Sub
この手のプログラムを書くのであれば、各モジュールの先頭には 『Option Explicit』宣言を必ずつけておくことをお奨めします。
グローバル変数があちこちで使われた Coding Horror な状況ですが、 コメントから予想すると、 Pos → position、x,y,zの位置を表す 0〜2の配列? Vel → velocity、位置vector座標を表す 0〜2の配列? TLE → Two-line elements フォーマットのこと? でしょうか? (違うかも)
> Public Sub CalcKeplar() > Dim Rad#, Pi# > Pi = 3.14159265358979 > Rad = 0.0174532925 有効桁数の揺れが気になりますが、それはさておき。
これらは固定値でしょうから、Const にした方が良いかと思います。
あるいは、Sub Main あたりで Pi = 4 * Atn(1) Rad = Pi / 180 として事前に算出しておく手もありますが。
> 掲示板の使用法に関して、まだうといのでご勘弁を・・・。 投稿前に、掲示板の利用規約を読んでおいてください。半角カナの利用は禁止されていますよ。 http://bbs.wankuma.com/index.cgi?mode=man
> E(離心率)のところで1以上となりオープンオービットでexitしてしまいました。 状況がさっぱり伝わってきません。(^^;
No56203 の VB6コード(2011/01/05 20:22:03 編集)を見ながら読んでみましたが、 ・Command1_Click 内で呼び出されている RVel プロシージャが、その中で どのような処理を行っているのか不明なので、第三者が問題点を再現できません。 ・No56264 で書かれた『E(離心率)』というのは、変数 E の事を指しているのだろうか? しかし、これが変数 E が 1.0 以上の値になってしまうという意味だと仮定しても、 この変数への代入は、Form の Load イベントで行われているのみであり、 値が書き換えられている様子は無いので、1 以上になる状況を想像しにくい。 (掲載されていない部分で書き換えられているかも知れませんが…) ・ここでいうところの『オープンオービット』の意味が説明されていない。 ・ここでいうところの『exit』が何を意味しているのか曖昧である。 (Exit Sub/Exit Functionステートメントの意味? それとも何かの用語?) という感じで、質問文の様相を呈していないように見えます。
> 何処がおかしいのかわからない。 アルゴリズムを理解できていないという事でしょうか? それとも、計算方法は分かっているが、それを自力で VB6 のコードにできない状況でしょうか? あるいは、とりあえずコーディングできたが、期待と異なる動作をしているのでしょうか?
> 公開ソースには、エラーが有るのかな? 元のコードに不具合があるかどうかは、事前に調査されていないのでしょうか?
そのような状況であれば、元のソースコードの各行がどのような処理を意図しているのか、 それぞれの意味を理解してから移植を進めた方が良いと思いますよ。そうしないと、 移植作業に問題があったのか、元コードのアルゴリズムに問題があったのか、あるいは それ以外の要因(演算誤差等)なのかを判断できないでしょうし。
> 打ち上げシュミレーションですが、 シミュレーション http://www.tt.rim.or.jp/~rudyard/kaego002.html
> から、ルンゲタック法等を引用しました。 ルンゲ・クッタ法の事? |
|