==================================== 曲線6 ==================================== Mathematicaを用いた練習を行います。 まず、Mathematica を使えるようにしてください。 プログラムの中の数字などを適当に変更してプログラムがうまく動くか試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。 コピーするか、自分で入力して、 Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります。 ----------------------------------- 関数のグラフを描くにはPlotを用います。 曲線を描くには、ParametricPlot も用います。 これは、y=f(x)の形になるもの以外も描く必要があるためです。 また、色をつけるためにパッケージ Graphics`Colors` を 使います。 ***** << Graphics`Colors` J[{p1_, p2_}] := {-p2, p1} ***** 平面曲線の曲率の様子は以前グラフで描きました。 ***** kappa2[alpha_][t_] := D[alpha[tt], {tt, 2}].J[D[alpha[tt], tt]]/Simplify[D[alpha[tt], tt].D[ alpha[tt], tt]]^(3/2) /. tt -> t ***** 例えば円の場合は次のようになります。 ***** ellip[a_, b_][t_] := {a*Cos[t], b*Sin[t]} ***** ***** Plot[kappa2[ellip[1, 1]][t], {t, 0, 2 Pi}] ***** ここでは関数を与えるとき、これを曲率とする曲線はどのようなものであるかを考えましょう。 関数fが与えられたとき、これを曲率とする曲線の微分方程式を解く(近似的に)プログラムは つぎで与えることができます。 ***** intrinsic[f_, a_:0, {c_:0, d_:0, e_:0}, {min_: - 10, max_:10}, opts___][t_] := Module[{x, y, theta, s}, eqic = {x'[s] == Cos[theta[s]], y'[s] == Sin[theta[s]], theta'[s] == f[s], x[a] == c, y[a] == d, theta[a] == e}; sol = NDSolve[eqic, {x, y, theta}, {s, min, max}, opts]; {x[t], y[t]} /. sol[[1]] ] ***** 例えば曲率が1であるものは円周ですが、これはつぎのようになります。 ***** ParametricPlot[Evaluate[intrinsic[1 &, {0, -1, 0}, {-50, 50}][t]], {t, 0 Pi, 2 Pi}, AspectRatio -> Automatic] ***** 曲率が(* f[t] =t *) で与えられる曲線はクロソイド曲線とよばれています。 ***** f[t_] := t ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-10, 10}][t]], {t, -10, 10}, AspectRatio -> Automatic] ***** 車の速度を一定としハンドルを一定の角速度で回した時に車が描く軌跡がクロソイド曲線である。 直線の道路に円形の道路を直接接続すると、自動車なら急なハンドル操作バイクなら急なバイクの倒しこみを 行わなければ円周上をトレースできない。 すなわち、加速度変化(加加速度)が大きくなり、乗物であれば乗客が危険になる。 そのため、直線と円とを繋ぐ中間にクロソイド曲線などの緩和曲線が挿入される。 ***** ParametricPlot[ Table[ intrinsic[f, {0, 0, a}, {-20, 20}][t], {a, 0, 3Pi/4, Pi/4}] // Evaluate, {t, -10, 10}, AspectRatio -> Automatic, Axes -> False] ***** ***** ParametricPlot[ Table[ intrinsic[f, {0, 0, a}, {-20, 20}][t], {a, 0, 2Pi/3, Pi/3}] // Evaluate, {t, -10, 10}, AspectRatio -> Automatic, Axes -> False, PlotPoints -> 100, PlotStyle -> {{RGBColor[0, 0, 1]}, {RGBColor[1, 0, 0]}, {RGBColor[0, 1, 0]}}] ***** ***** Table[ParametricPlot[ Table[ intrinsic[# &, {0, 0, a + b}, {-10, 10}][t], {a, 0, 3Pi/4, Pi/4}] // Evaluate, {t, -10, 10}, AspectRatio -> Automatic, Axes -> False, PlotStyle -> {{RGBColor[0, 0, 1]}, {RGBColor[1, 0, 0]}, {RGBColor[1/3, 0, 1/3]}, {RGBColor[0, 1, 0]}}, PlotRange -> {{-2, 2}, {-2, 2}}], {b, 0, 31Pi/32, Pi/32}] ***** ***** Table[ParametricPlot[ intrinsic[# &, {0, 0, a}, {-20, 20}][t] // Evaluate, {t, -10, 10}, AspectRatio -> Automatic, Axes -> False, PlotStyle -> {{RGBColor[0, 0, 1]}, {RGBColor[1, 0, 0]}, {RGBColor[0, 1, 0]}}, PlotRange -> {{-2, 2}, {-2, 2}}], {a, 0, 63Pi/64, Pi/64}] ***** ***** f[t_] := 1/2 t+3 ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-10, 10}][t]], {t, -10, 10}, AspectRatio -> Automatic] ***** (* f[t_] := 1/2 t+3 *)をいろいろな1次式に変えてみましょう。どのように変化しますか。 **************************************** 次に他の曲線を考えましょう。 ************* f[s_] := Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -4 Pi, 4 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 0.6 Sin[s]+0.3 ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 2 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* (* f[s_] := 2 Sin[s] *)の2をいろいろに変えてみましょう。どのように変化しますか。 ************* f[s_] := 2.3 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 2.4047 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 2.7 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 4 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 5 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 5.51 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := 6 Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -10 Pi, 10 Pi}, AspectRatio -> Automatic] ************* ************* f[s_] := s Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -4 Pi, 4 Pi}, AspectRatio -> Automatic] ************* (* f[s_] := 2 s Sin[s] *)の2をいろいろに変えてみましょう。どのように変化しますか。 ************* f[s_] := 2 s Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -15, 15}, AspectRatio -> Automatic] ************* ************* f[s_] := 1.4 s Sin[s] ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -15, 15}, AspectRatio -> Automatic] ************* 他にもいろいろと変えてみましょう。どんな図形があらわれますか。 ************* f[s_] := s Sin[s]^2 ***** ***** ParametricPlot[Evaluate[intrinsic[f, {0, 0, 0}, {-50, 50}][t]], {t, -20, 20}, AspectRatio -> Automatic] ************* 係数を変えてみましょう。どんな図形があらわれますか。 ************* g[n_][s_] := (1+n) Sin[s]^2 ***** ***** ParametricPlot[Evaluate[intrinsic[g[2], {0, 0, 0}, {-50, 50}][t]], {t, -20, 20}, AspectRatio -> Automatic] ************* ***** ParametricPlot[Evaluate[intrinsic[g[0.6], {0, 0, 0}, {-50, 50}][t]], {t, -20, 20}, AspectRatio -> Automatic] ************* nを変えてみましょう。どんな図形があらわれますか。 ************* CC1 = ParametricPlot[Evaluate[intrinsic[( 1#Cos[#]) &, 0, {0, 0, 0}, {-20, 20}][t]], {t, -20, 20}, PlotPoints -> 80, PlotStyle -> {RGBColor[0, 0, 1]}] CC2 = ParametricPlot[Evaluate[intrinsic[(-1#Cos[#]) &, 0, {0, 0, 0}, {-20, 20}][t]], {t, -20, 20}, PlotPoints -> 80, PlotStyle -> {RGBColor[0, 0, 1]}] CC3 = ParametricPlot[Evaluate[intrinsic[(#Sin[1.2 #]) &, 0, {0, 0, 0}, {-20, 20}][t]], {t, -20, 20}, PlotPoints -> 80, PlotStyle -> {RGBColor[0, 1, 0]}] CC4 = ParametricPlot[Evaluate[intrinsic[(-#Sin[1.3 #]) &, 0, {0, 0, 0}, {-20, 20}][t]], {t, -20, 20}, PlotPoints -> 80, PlotStyle -> {RGBColor[1, 0, 0]}] Show[CC1, CC2, CC3, CC4, Axes -> False] *************