[[20211025212909]] 『水平投射のシミュレーションのマクロがうまくいき』(にゃおごろん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『水平投射のシミュレーションのマクロがうまくいきません』(にゃおごろん)

学校の課題で水平投射のシミュレーションをマクロで作成しています。
学校から提示された初期データをもとに作成しているのですが、うまくいきません。
お手数ですがご教示お願いします。

========================
初期値 垂直位置 100 水平位置 0
設定値 "重力
加速度" 9.8 初速度 10
時間設定 終了時間 5 時間間隔 0.25

時間 t 垂直位置 水平位置
0 100 0
0.25 99.69375 2.5
0.25 99.3875 2.5
0.25 99.08125 2.5
0.25 98.775 2.5
0.25 98.46875 2.5
0.25 98.1625 2.5
0.25 97.85625 2.5
0.25 97.55 2.5
0.25 97.24375 2.5
0.25 96.9375 2.5
0.25 96.63125 2.5
0.25 96.325 2.5
0.25 96.01875 2.5
0.25 95.7125 2.5
0.25 95.40625 2.5
0.25 95.1 2.5
0.25 94.79375 2.5
0.25 94.4875 2.5
0.25 94.18125 2.5
0.25 93.875 2.5

=========================

Sub 水平投射()

    '初期値
    垂直位置 = Cells(1, 3).Value
    水平位置 = Cells(1, 5).Value
    '設定値
    重力加速度 = Cells(2, 3).Value
    初速度 = Cells(2, 5).Value
    '時間設定
    終了時間 = Cells(3, 3).Value
    時間間隔 = Cells(3, 5).Value
    '繰り返し回数の初期設定
    回数 = 1
    '初期状態表示
    Cells(6, 1).Value = 0
    Cells(6, 2).Value = 垂直位置
    Cells(6, 3).Value = 水平位置

    '計算
   For 時間 = 時間間隔 To 終了時間 Step 時間間隔
        垂直位置 = 垂直位置 - 重力加速度 * 時間間隔 * 時間間隔 / 2
        水平位置 = 初速度 * 時間間隔
        Cells(6 + 回数, 1).Value = 時間間隔
        Cells(6 + 回数, 2).Value = 垂直位置
        Cells(6 + 回数, 3).Value = 水平位置
        回数 = 回数 + 1

   If 垂直位置 < 0 Then Exit For

   Next 時間

End Sub

============================

掲示板初心者なので實問の仕方がおかしかったり、足りないところがあったら申し訳ないです。
どうぞよろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:unknown >


 時間と時間間隔がどういうもので位置の計算式はどっちをつかうのか考えよう
 グラフ化するときの横軸は何か考えよう
(´・ω・`) 2021/10/25(月) 21:55

 余談だけど
 For 時間 = 時間間隔 To 終了時間 Step 時間間隔
 としてるが、時間も時間間隔も浮動小数点数なのでループの制御変数には使わないほうがよい
 理由は演算誤差があるから
(´・ω・`) 2021/10/25(月) 22:01

ご返信ありがとうございます。
申し訳ないのですが、こういったものに弱く正直おっしゃっていることが理解できません。
大変お手数なのですが、もう少し詳しくご説明願えますでしょうか?
(にゃおごろん) 2021/10/25(月) 22:05

 学校の課題ですよね。
 私的には十分なヒントを出したとおもってるので、私からはこれ以上はお断りします。

 もしかしたら、親切な回答者がもっとヒントを書いてくれるかもしれません

 あと、もう一つ余談ですが、書き込まれた内容がもし課題の内容とまったく同じであれば、
 初速度の方向が書いてないのは問題の不備だとおもいます。

 初速度が水平方向と明示されてなければ、
 鉛直投げ上げや投げ下ろしとして計算しても間違いじゃないように思います。
(´・ω・`) 2021/10/25(月) 22:17

少ない情報の中、重ね重ねありがとうございます。
おっしゃる通り学校の課題なので、もう少し自分で試行錯誤したいと思います。
それでも行き詰った場合またご相談させていただければと思います。

(にゃおごろん) 2021/10/25(月) 22:27


 Sub 水平投射()
     '初期値
     初期垂直位置 = Cells(1, 3).Value
     初期水平位置 = Cells(1, 5).Value

     '設定値
     重力加速度 = Cells(2, 3).Value
     初速度 = Cells(2, 5).Value

     '時間設定
     終了時間 = Cells(3, 3).Value
     時間間隔 = Cells(3, 5).Value

     '繰り返し回数の初期設定
     回数 = 1

     '初期状態表示
     Cells(6, 1).Value = 0
     Cells(6, 2).Value = 初期垂直位置
     Cells(6, 3).Value = 初期水平位置

     '計算
     For 時間 = 時間間隔 To 終了時間 Step 時間間隔
         垂直位置 = 初期垂直位置 - 重力加速度 * (時間間隔 * 回数) * (時間間隔 * 回数) / 2
         水平位置 = 初期水平位置 + 初速度 * 時間間隔 * 回数
         Cells(6 + 回数, 1).Value = Cells(6 + 回数 - 1, 1).Value + 時間間隔
         Cells(6 + 回数, 2).Value = 垂直位置
         Cells(6 + 回数, 3).Value = 水平位置
         回数 = 回数 + 1

     Next 時間
 End Sub

 <結果図>
 行  ____A____  _____B_____  ____C____  ____D____  __E__
  1  初期値     垂直位置           100  水平位置       0
  2  設定値     重力加速度         9.8  初速度        10
  3  時間設定   終了時間             5  時間間隔    0.25
  4                                                     
  5  時間 t     垂直位置     水平位置                   
  6       0.00    100.00000        0.0                  
  7       0.25     99.69375        2.5                  
  8       0.50     98.77500        5.0                  
  9       0.75     97.24375        7.5                  
 10       1.00     95.10000       10.0                  
 11       1.25     92.34375       12.5                  
 12       1.50     88.97500       15.0                  
 13       1.75     84.99375       17.5                  
 14       2.00     80.40000       20.0                  
 15       2.25     75.19375       22.5                  
 16       2.50     69.37500       25.0                  
 17       2.75     62.94375       27.5                  
 18       3.00     55.90000       30.0                  
 19       3.25     48.24375       32.5                  
 20       3.50     39.97500       35.0                  
 21       3.75     31.09375       37.5                  
 22       4.00     21.60000       40.0                  
 23       4.25     11.49375       42.5                  
 24       4.50      0.77500       45.0                  
 25       4.75    -10.55625       47.5                  
 26       5.00    -22.50000       50.0                  

(半平太) 2021/10/25(月) 22:58


半平太様、ご返信ありがとうございます。
参考にさせていただき、自分の間違いに気づくことができ、おかげさまで課題も終える事が出来ました。
誠にありがとうございました。
(にゃおごろん) 2021/10/25(月) 23:37

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.