[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『斜方投射のシミュレーションのマクロができません』(にゃおごろん)
先程ご解答くださったみなさまありがとうございました。
おかげさまで問題点に気づき解決することができました。本当にありがとうございました。
斜方投射のシミュレーションのマクロ作成が思うように進まないためご教示お願いします、
打ち上げ角度から位置を求める際、今は愚直にルートを用いた式で計算しているのですが、結果を見るにどこか間違っているようなのですがわかりません。
かつ、できることならたとえどんな角度でも計算できるようにするべきだと担当教員から言われたのですが、その方法が思いつきません。
水平位置を求めた時に、なぜか途中で途切れてしまいます。
==============================
初期値 垂直位置 0 水平位置 0
設定値 "重力
加速度" 9.8 初速度 25 "打ち上げ
角度" 45
時間設定 終了時間 5 時間間隔 0.1
時間 t 垂直位置 水平位置
0 0 0
0.1 17.62866953 1.767766953
0.2 35.11033906 35.35533906
0.3 52.34700859 53.03300859
0.4 69.24067812 70.71067812
0.5 85.69334765 88.38834765
0.6 101.6070172 106.0660172
0.7 116.8836867 123.7436867
0.8 131.4253562 141.4213562
0.9 145.1340258 159.0990258
1 157.9116953 176.7766953
1.1 169.6603648 194.4543648
1.2 180.2820344 212.1320344
1.3 189.6787039 229.8097039
1.4 197.7523734 247.4873734
1.5 204.4050429 265.1650429
1.6 209.5387125 282.8427125
1.7 213.055382 300.520382
1.8 214.8570515 318.1980515
1.9 214.8457211 335.8757211
2 212.9233906 353.5533906
2.1 208.9920601 371.2310601
2.2 202.9537297 388.9087297
2.3 194.7103992 406.5863992
2.4 184.1640687 424.2640687
2.5 171.2167382 441.9417382
2.6 155.7704078 459.6194078
2.7 137.7270773 477.2970773
2.8 116.9887468 494.9747468
2.9 93.45741636 512.6524164
3 67.03508589 530.3300859
3.1 37.62375542 548.0077554
3.2 5.125424949 565.6854249
3.3 -30.55790552 583.3630945
3.4 7.232679959
3.5 7.44540584
3.6 7.658131721
3.7 7.870857602
3.8 8.083583483
3.9 8.296309364
4 8.509035245
4.1 8.721761126
4.2 8.934487008
4.3 9.147212889
4.4 9.35993877
4.5 9.572664651
4.6 9.785390532
4.7 9.998116413
4.8 10.21084229
4.9 10.42356818
5 10.63629406
===================================
Sub 斜方投射()
'初期値 初期垂直位置 = Cells(1, 3).Value 初期水平位置 = Cells(1, 5).Value '設定値 重力加速度 = Cells(2, 3).Value 初速度 = Cells(2, 5).Value 打ち上げ角度 = Cells(2, 7).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 ^ (1 / 2) / 2 - 1 / 2 * 重力加速度 * 時間間隔 * 時間間隔 水平位置 = 水平位置 + 初速度 * 2 ^ (1 / 2) / 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 >
回答ではありません。余談を重ねますが、 物理の課題なのか情報の課題なのかわかりませんが、
浮動小数点数 xを x0 から xt まで dx 刻みで変化させるときのループ方法は
Sub sample() Dim x As Double, x0 As Double, xt As Double, dx As Double x0 = 0 xt = 10 dx = 0.1 For x = x0 To xt Step dx Debug.Print x Next End Sub
よりも
Sub sample2() Dim x As Double, x0 As Double, xt As Double, dx As Double Dim I As Long, eps As Double x0 = 0 xt = 10 dx = 0.1 eps = 0.0001 ' とりあえず十分小さい数 For I = Int(x0 / dx + eps) To Int(xt / dx + eps) x = I * dx Debug.Print x Next End Sub
の方がいいですよって話は、学校じゃ教えないんですかね? まだそれを教えるところまで段階が進んでない?のかな? (´・ω・`) 2021/10/26(火) 09:32
>水平位置を求めた時に、なぜか途中で途切れてしまいます。 表示エリアは、最初にクリアしておかないと、 以前のデータ(多分間違ったもの)が残ってしまうことがあります。
>どんな角度でも計算できるようにする 三角関数を使ってください。角度はラジアンに変換する必要があります。
時間間隔が0.25なら、2進数と完全合致するので小数演算誤差は発生しないが、 0.1の間隔だと、どこで誤差が発生して悪さをされるか予想がつかないので、 ループカウンターは整数になるようにしておいた方が無難。
Sub 斜方投射() '初期値 初期垂直位置 = Cells(1, 3).Value 初期水平位置 = Cells(1, 5).Value '設定値 重力加速度 = Cells(2, 3).Value 初速度 = Cells(2, 5).Value 打ち上げ角度 = Cells(2, 7).Value '時間設定 終了時間 = Cells(3, 3).Value 時間間隔 = Cells(3, 5).Value '繰り返し回数の初期設定 回数 = 1 '初期状態表示 Cells(6, 1).Value = 0 Cells(6, 2).Value = 初期垂直位置 Cells(6, 3).Value = 初期水平位置
パイ = Application.Pi() 垂直等速度 = 初速度 * Sin(打ち上げ角度 * パイ / 180) 水平等速度 = 初速度 * Cos(打ち上げ角度 * パイ / 180)
'計算 For i = 1 To Application.Round(終了時間 / 0.1, 0) 時間 = i * 0.1
垂直位置 = 垂直等速度 * 時間 - 1 / 2 * 重力加速度 * 時間 ^ 2 水平位置 = 水平等速度 * 時間
Cells(6 + 回数, 1).Value = 時間 Cells(6 + 回数, 2).Value = 垂直位置 Cells(6 + 回数, 3).Value = 水平位置 回数 = 回数 + 1
If 垂直位置 < 0 Then Exit For End If Next i End Sub
(半平太) 2021/10/26(火) 09:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.