================ Rational Bezier1 ================ Mathematicaを用いた練習を行います。 Mathematica は毎回使いますから、GNOMEパネルの ランチャーに登録しておきましょう。 Mathematica は 「センターメニュー」-「アプリケーション」-「Mathematic数式処理」 にあります。 適当にプログラムの中の数字などを変更して試してみてください。 以下の説明の中で*****ではさまれた部分は Mathematica に入力する文字列です。自分で入力し Shift+Enter(Return) キーで実行します。 上から順に,すべて実行するようにしてください。 上で定義した関数を後で利用すること があります。 ベジエ曲線を用いて、絵を描いてみましたが、 3点から定まるベジエ曲線は常に放物線でした。 では、円、楕円や双曲線を描くにはどうすればいいのでしょうか? これを解決するために、重みの概念が考えられました。 重みを変化させるとどのように曲線が変化するかをみましょう。 Mathematica から一度出ましょう。再び Mathematica を立ち上げて下さい。 ****** Needs["Graphics`Colors`"] Cn[s_] := n!/(s!*(n - s)!) Bn[s_, u_] := Cn[s]*(u^s)*((1 - u)^(n - s)) 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}] RatBezCurve2[a_, b_][pt_, color_] := ParametricPlot[Evaluate[AA[n]], {t, a, b}, AspectRatio -> Automatic, Axes -> True, PlotRange -> All, PlotStyle -> {Thickness[pt], color}] B2Poly := ParametricPlot[Evaluate[L[n]], {t, 0, 1}, AspectRatio -> Automatic, Axes -> True, PlotStyle -> {Thickness[0.005]}] RatBezPloy2[a_, b_] := Show[RatBezCurve2[a, b], B2Poly] ****** w[0], w[1], w[2] が重みです。 まず放物線を描きましょう。 このときは、重みはどれも1です。 ****** n = 2 b[0] = {-1, 1} b[1] = {0, -1} b[2] = {1, 1} w[0]=1 w[1]=1 w[2]=1 pa1=RatBezCurve2[-1/2, 3/2][ 0.005, Black] ****** 次に、重みを変えてみましょう。 ****** w[0] = 1 w[1] = 1 w[2] = 3 cir1 = RatBezCurve2[-1/2, 3/2][0.005, Red] ****** ****** w[0] = 1 w[1] = 1 w[2] = 1/3 hyp1 = RatBezCurve2[-.35, 1.1][0.005, Blue] ****** ****** Show[pa1, cir1, hyp1] ****** 別の3点をとってみましょう。 ****** n = 2 b[0] = {1, 0} b[1] = {1, 1} b[2] = {0, 1} ****** ****** w[0] = 1 w[1] = 1 w[2] = 1 pa2 = RatBezCurve2[-1/2, 3/2][0.005, Black] w[0] = 1 w[1] = 1 w[2] = 2 cir2 = RatBezCurve2[-1/2, 3/2][0.005, Red] w[0] = 1 w[1] = 1 w[2] = 1/2 hyp2 = RatBezCurve2[-.2, 1.1][0.005, Blue] ****** ****** Show[pa2, cir2, hyp2] ****** 4点以上をとって、重みをいろいろと変えて どのように変化するかを確かめてみましょう。 デカルトの葉線をかいてみましょう。 ****** n = 3 b[0] = {0, 0} b[1] = {1, 0} b[2] = {2, 1} b[3] = {3/2, 3/2} w[0] = 1 w[1] = 1 w[2] = 1 w[3] = 2 deca1 = RatBezCurve2[-1/2, 1][0.005, Red] b[0] = {0, 0} b[1] = {0, 1} b[2] = {1, 2} b[3] = {3/2, 3/2} w[0] = 1 w[1] = 1 w[2] = 1 w[3] = 2 deca2 = RatBezCurve2[-1/2, 1][0.005, Red] Show[deca1, deca2] ******