オイラー法で転がりの数値計算 (いろいろな方向から1つのカップを狙う)
JavaScriptで数値計算(2)
<span style="color:red; font-size:12pt">いろいろな方向から1つのカップを狙う方法</span>にある図は、厳密な式を用いて自動的に狙う位置を計算した結果です。
それに対して、ここでは、<span style="color:red; font-size:12pt">数値計算(その1)</span>と同様にもっと単純な近似計算で求めてみよう。厳密な式の検証でもある。
これは、実際のパッティングの試行錯誤に近い。
カップに入るような方向と打つ強さを見つけるのと同じやり方です。
時間がかかることが実感できるでしょう。
パッティングの経験を通して狙い方のコツを知ることの難しさを物語っている。
(1) S点、つまり、たとえば傾斜の強さg=0.7ならカップの真上の距離0.7の地点が基準になる。
(2) S点の真下あるいは真上の位置を決めて、その方向に適当な強さで打ってみる。
(3) 停止した位置がカップに最も近づくように、打つ強さを変える。ここでは、自動で計算する。
(4) それでカップに入らなければ、(2)の位置をずらす。
カップに近づくかどうかは、インジケータを目安にする。
1つ前の実行よりも近づいたかどうかを示している。
◀◁◁(Cup) … カップの上側から遠ざかる。
▶▷▷(Cup) … カップの上側から近づいている。
◁◀◁(Cup) … カップの上側から遠ざかるが、十分近い。(距離が0.001未満)
▷▶▷(Cup) … カップの上側から十分近づいた。(距離が0.001未満)
◁◁◀(Cup) … カップの上側から遠ざかるが十二分近い。(距離が0.0001未満)
▷▷▶(Cup) … カップの上側から十二分近づいた。(距離が0.0001未満)
下側も同様。
遠ざかる時には、dy0の加算値の符合を逆にして実行する。
たとえば、「+1.000e-3」を「-1.000e-3」にする。
カップの上側から近づいていたのに、下側に移動した時には、加算値の符合を逆にするか、あるいは、1つ戻って、加算値を1桁小さくして実行する。
カップまでの距離は10mのレベルまで分かればいいので、停止位置の「距離」が0.001未満になれば十分で、0.0001未満になれば十二分です。
戻る、進むは最大10個保存される。
ブラウザーのJavaScriptを有効にすると実行できます。
g > 1については、この近似計算では正しく計算できないので、g=0〜1の範囲のみ計算します。
g ≈ 0.8945が本当につぶれていることを確かめてみましょう。
これは、Yさんからの質問に答えているときに思いついた。