==================================== 曲線5 ==================================== Mathematicaを用いた練習を行います。 まず、Mathematica を使えるようにしてください。 プログラムの中の数字などを適当に変更してプログラムがうまく動くか試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。 コピーするか、自分で入力して、 Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります。 ----------------------------------- 関数のグラフを描くにはPlotを用います。 曲線を描くには、ParametricPlot も用います。 これは、y=f(x)の形になるもの以外も描く必要があるためです。 また、色をつけるためにパッケージ Graphics`Colors` を 使います。 ***** Needs["Graphics`Colors`"] ***** 空間曲線を描くためには、ParametricPlot3Dを用います。 ***** helix[u_] := {Cos[t], Sin[t], t/4} /. t -> u ***** ***** ParametricPlot3D[helix[t] // Evaluate, {t, 0, 6 Pi}] ***** ***** viviani[a_][t_] := a*{1 + Cos[t], Sin[t], 2 Sin[t/2]} ***** ***** ParametricPlot3D[viviani[1][t] // Evaluate, {t, 0, 4 Pi}] ***** ***** CCCR[u_List, v_List] := RotateLeft[u RotateLeft[ v] - RotateLeft[u] v] /; Length[u] == Length[v] == 3 tangent[curve_][t_] := D[curve[tt], tt]/Simplify[Factor[D[curve[tt], tt].D[curve[tt], tt]]]^(1/2) /. tt -> t binormal[curve_][t_] := Simplify[CCCR[ D[curve[tt], tt], D[curve[ tt], {tt, 2}]]]/Simplify[ Factor[CCCR[D[ curve[tt], tt], D[curve[tt], {tt, 2}]].CCCR[D[curve[tt], tt], D[curve[tt], {tt, 2}]]]]^(1/ 2) /. tt -> t normalll[curve_][t_] := CCCR[binormal[curve][t], tangent[curve][t]] tubecurve[ff_][r_][t_, theta_] := ff[t] + r*( Cos[theta] normalll[ff][t] + Sin[theta] binormal[ff][t])/2 tubecurve10[ff_][r_][ a_, b_][t_, theta_] := ff[t] + r*(a*Cos[theta] normalll[ff][t] + b*Sin[theta] binormal[ff][t])/2 seashell[ff_][r_][t_, theta_] := ff[t] + t*r*(Cos[theta] normalll[ff][t] + Sin[theta] binormal[ff][t]) ***** ***** plnormalll[curve_][t_] := CCCR[{0, 1, 0}, tangent[curve][t]] planetubecurve[ff_][r_][t_, theta_] := ff[t] + r*(Cos[theta] plnormalll[ff][t] + Sin[theta] {0, 1, 0})/2 ***** ***** WW1 = ParametricPlot3D[tubecurve[helix][.2][t, theta] // Evaluate, {theta, 0, 2*Pi}, {t, 0, 6 Pi}, PlotPoints -> {20, 120} ***** ***** Cn[s_] := n!/(s!*(n - s)!) Bn[s_, u_] := Cn[s]*(u^s)*((1 - u)^(n - s)) SS[n_] := Sum[b[j]*Bn[j, t], {j, 0, n}] AA[n_] := Sum[w[j]*b[ j]*Bn[j, t], {j, 0, n}]/Sum[w[j]*Bn[j, t], {j, 0, n}] L[n_] := Table[(1 - t)*b[i] + t*b[i + 1], {i, 0, n - 1}] Bezier := ParametricPlot[Evaluate[ SS[n]], {t, 0, 1}, AspectRatio -> Automatic, Axes -> True, PlotRange -> All] RatBezCurve := ParametricPlot[Evaluate[AA[n]], { t, 0, 1}, AspectRatio -> Automatic, Axes -> True, PlotRange -> All] B2Poly := ParametricPlot[ Evaluate[L[n]], {t, 0, 1}, AspectRatio -> Automatic, Axes -> True, PlotStyle -> {Thickness[0.005]}] ***** ***** n = 2 b[0] = {1, 0} b[1] = {1, 1} b[2] = {0, 1} Bezier hh1 = SS[n] ***** ***** h1[u_] := {hh1[[1]], 0, hh1[[2]]} /. t -> u WW1 = ParametricPlot3D[ tubecurve[h1][.4][t, theta] // Evaluate, {theta, 0, 2*Pi}, {t, 0, 1}] ***** ***** h2[u_] := {Cos[u] + 2, Sin[u] - 1, -1} /. t -> u WW2 = ParametricPlot3D[tubecurve[ h2][.8][t, theta] // Evaluate, {theta, 0, 2*Pi}, {t, 0, 2*Pi}, PlotRange -> All, PlotPoints -> {20, 40}] ***** ***** ParametricPlot3D[Append[tubecurve[ h2][.4][t, theta], FaceForm[Red, Pink]] // Evaluate, {t, 0, 2*Pi}, {theta, -Pi/2, Pi/2}, PlotRange -> All, PlotPoints -> {24, 16}, Lighting -> False] ***** ***** h20[u_] := {5*Cos[u] + 2, 5*Sin[u] - 1, 5} /. t -> u ***** ***** ParametricPlot3D[tubecurve10[h20][ 4][2, 4][t, theta] // Evaluate, {theta, -Pi, Pi/8}, {t, 0, 2*Pi}, PlotRange -> All, PlotPoints -> {20, 40}] ***** ***** n = 3 b[0] = {0, 0} b[1] = {0, 1} b[2] = {1, 1} b[3] = {1, 2} Bezier hh2 = SS[n] ***** ***** h2[u_] := {hh2[[1]], 0, hh2[[2]]} /. t -> u WW1 = ParametricPlot3D[ tubecurve[h2][.4][t, theta] // Evaluate, {theta, 0, 2*Pi}, {t, 0, 1}] ***** ***** WW2 = ParametricPlot3D[planetubecurve[h2][.4][ t, theta] // Evaluate, {theta, 0, 2*Pi}, {t, 0, 1}] *****