読者です 読者をやめる 読者になる 読者になる

倭算数理研究所

科学・数学・学習関連の記事を、「倭マン日記」とは別に書いていくのだ!

2.9 視覚化 wheel

今回から何回かははシミュレーション結果をプロットする練習です。 今回は剛体の車輪が水平な地面を滑ることなく転がる場合の、車輪上の点の運動をプロットします。

以降の記事では、得に断らない限り、水平方向に \( x \) 軸、鉛直方向に \( y \) 軸(上向きを正)にとります。

理論

剛体の車輪が水平な地面上を \( x \) 軸の正の方向へ滑っているとき、車輪上に固定された1点の運動は以下のように表されます:

\begin{align*}
x(t) &= -r \cos \omega t + v_{\rm cm} t \\
y(t) &= r \sin \omega t
\end{align*}

ここで

  • \( (x(t),\,y(t)) \) : 車輪上の点の座標
  • \( r \) : 車輪の半径
  • \( \omega \) : 車輪の回転速度(角速度)
  • \( v_\textrm{cm} \) : 車輪の中心の速さ

です。 車輪の中心は \( x \) 軸上を運動するとしています。

シミュレーション・スクリプト

今回はプロットする点の関数形が分かっているので、シミュレーション・スクリプトと言っても関数をプロットするだけです。 Groops では、物理系の定義なしに簡単な関数をプロット出来るようにしています。 関数をプロットするには function ノードに関数を表す(Groovy の)クロージャを指定します。

@GrabResolver('https://github.com/waman/groops-core/tree/master/repo')
@Grab('org.waman.groops:groops-core:0.1-beta')

import org.waman.groops.builder.SimulationBuilder
import org.waman.groops.simulation.system.*

double r = 1.0d, w = 1.0d, v = r*w

new SimulationBuilder().simulation{

    function(x:{ t -> -r*Math.cos(w*t)+v*t }, y:{ t -> r*Math.sin(w*t) }, dt:0.01d)
    init(t:0.0d)
    continueWhile{ it.x < 20.0d }

    console()
    png(fileName:'wheel.png', overwrite:true){
        chart(title:'Wheel', domainLabel:'x', rangeLabel:'y'){
            dot(label:"Simulation", x:'x', y:'y')
            marker(label:"Surface", y:-r, paint:java.awt.Color.BLUE)
        }
    }
}.simulate()
  • wheel.groovy 直
  • 媒介変数を用いた関数をプロットする場合は、function ノードの x 属性y 属性クロージャを渡します。
  • function ノードには、他に tmin, tmax,, dt 属性を指定できます。 それぞれ媒介変数 t の最小値、最大値、増加量です。 x 属性などに渡すクロージャの引数 t ( { t -> ... } の t )は他の名前でも構いませんが、tmin, tmax, dt は t に決め打ちにしています。
  • ここでは tmin を指定する代わりに init ノードで t の初期値を指定し、tmax の代わりに continueWhile ノードで(x の値を使った)反復条件を指定しています。
  • function ノードを指定すると関数を表す物理系が生成されますが、この物理系は以下のような状態変数、パラメータを持っています:
    • 状態変数 t, x, y. どれも double 型
    • パラメータ tmin, tmax, dt. こちらも double 型
  • y = f(x) の形の関数をプロットする場合は、function ノードに y 属性に関数を表すクロージャを指定し、xmin, xmax, dx 属性を渡します*1

シミュレーションを実行すると、以下のようなグラフが生成されます:


車輪上の点は、地面に接地するとき離れるときともに地面に垂直に動くため、地面と平行に働く摩擦力は仕事をしないことが分かります。
計算物理学入門

計算物理学入門

  • 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/12
  • メディア: 単行本
  • 購入: 1人 クリック: 28回
  • この商品を含むブログ (45件) を見る
プログラミングGROOVY

プログラミングGROOVY

*1:この場合の状態変数は x, y、パラメータは xmin, xmax, dx となります