• ベストアンサー

Βスプライン曲線とベジェ曲線について

パソコンの本を読んでいてtruetypeフォントは2次のΒスプライン曲線を使っていますと紹介されて以下の2式で描けますとだけしか書かれていなかったのでよくわかりませんでした。 Βスプライン曲線の x=(1-t)^2x1+2(1-t)tx2+t^2x3 y=(1-t)^2y1+2(1-t)ty2+t^2y3 0≦t≦1 という式はどのように導き出すのでしょうか? また ベジェ曲線についてもどのように導き出すのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • take008
  • ベストアンサー率46% (58/126)
回答No.3

こんなことをしたことありませんか? x軸上の点 P(1-t,0) とy軸上の点 Q(0,t) を結ぶ(t=0.1,0.2,…,1.0)。 すると,曲線が浮かび上がって見えますね。 これは45゜傾いた放物線で,x軸,y軸が接線になっています。 すべてのPQも接線で,接点はPQの t:1-t の内分点になります。 これは,A(x1,y1),B(x2,y2),C(x3,y3)について,次のように一般化されます。 AB,BCの t:1-t の内分点をそれぞれ P,Q とし,それを結ぶと,放物線が浮かび上がります。 放物線と PQ の接点Rは PQ の t:1-t の内分点になります。 特に,AB,CB はそれぞれ A,C における接線になります。 位置ベクトルを計算すると p=(1-t)a+tb q=(1-t)b+tc r=(1-t)p+tq=(1-t)^2a+2t(1-t)b+t^2c 参考URLの「3点を通る放物線」参照

参考URL:
http://www.ss.u-tokai.ac.jp/~ooya/Program/Math/
hirohiro8888
質問者

お礼

ありがとうございます。 自分で計算したとき比のとりかたが間違って結果どうりの答えがもとめられませんでした。再確認させていただき、もう一度計算しなおしたらできました。 間違った原因はABをt:(1-t)BCを(1-t):tと置いてしまっていたせいです。 理解できました。本当にありがとうございます!

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

がんばって式をこねくり回してみましたけど、 何でこんな式になるのかは知る必要なかったような気が… 曲線の始点を(x1,y1)、制御点を(x2,y2)、終点を(x3,y3)とする Βスプライン曲線はtの値を0~1まで少しずつ動かしながら  x=(1-t)^2・x1+2(1-t)・t・x2+t^2・x3  y=(1-t)^2・y1+2(1-t)・t・y2+t^2・y3 で座標を計算して結んでいけば描けます。 と言っているだけだと思いますが…

すると、全ての回答が全文表示されます。
回答No.1

合ってるかどうかは?ですが… 【Bスプライン】 始点:P1(X1,Y1) 終点:P3(X3,Y3) 制御点:P2(X2,Y2) 二次曲線を媒介変数(t)を用いて次のように表すことにする X=F(t)=Ax・t^2 + Bx・t + Cx Y=G(t)=Ay・t^2 + By・t + Cy (0≦t≦1) t=0のとき(F(t), G(t)) = P1(X1, Y1) となるためには Cx = X1  Cy = Y1 t=1のとき(F(t), G(t)) = P3(X3, Y3) となるためには Ax + Bx + X1 = X3 → Ax + Bx = X3 - X1 Ay + By + Y1 = Y3 → Ay + By = Y3 - Y1 t=0のとき曲線が線分P1-P2とP1において接するためには F'(t)=2・Ax・t + Bx  G'(t)=2・Ay・t + By F'(0) : G'(0) = Bx : By = X2 - X1 : Y2 - Y1 となっていなければならない。 係数nを導入して次のように置くことにする F'(0) = Bx = n・(X2 - X1) G'(0) = By = n・(Y2 - Y1) またt=1のとき曲線が線分P2-P3とP3において接するためには F'(1) : G'(1) = 2・Ax + Bx : 2・Ay + By = X3 - X2 : Y3 - Y2 となっていなければならない。 係数kを導入して次のように置くことにする F'(1) = 2・Ax + Bx = k・(X3 - X2) G'(1) = 2・Ay + By = k・(Y3 - Y2) これを解いていくと Ax = {k・(X3 - X2) - n・(X2 - X1)}/2 Bx = n・(X2 - X1) Cx = X1 (以下Ay,By,Cyについては同型なので省略する) これを元の式 F(t)=Ax・t^2 + Bx・t + Cx に代入し X1, X2, X3 についてまとめると、 F(t)={k・(X3 - X2) - n・(X2 - X1)}/2・t^2 + n・(X2 - X1)・t + X1  =(n/2・t^2 - n・t + 1)・X1 - {(k+n)/2・t^2 - n・t}・X2 + k/2・X3・t^2 P1とP3が逆になったときでもこの曲線が同じ軌跡を描くためには。 H(t)=(n/2・t^2 - n・t + 1)・X3 - {(k+n)/2・t^2 - n・t}・X2 + k/2・X1・t^2 において H(1) = (n/2 - n + 1)・X3 - {(k+n)/2 - n}・X2 + k/2・X1  = (1 - n/2)・X3 - {(k-n)/2}・X2 + k/2・X1 = F(0) = X1 が常に成り立たねばならないことから n=k=2 F(t)={k・(X3 - X2) - n・(X2 - X1)}/2・t^2 + n・(X2 - X1)・t + X1  =(t^2 - 2・t + 1)・X1 - {2・t^2 - 2・t}・X2 + X3・t^2  =(t-1)^2・X1 + 2・(1-t)・t・X2 + X3・t^2 同様に G(t)=(t-1)^2・Y1 + 2・(1-t)・t・Y2 + Y3・t^2 ふぅ…疲れた...(o_ _)oバタッ

hirohiro8888
質問者

お礼

回答ありがとうございます。 長文で書いていただき、大変恐縮しています。

すると、全ての回答が全文表示されます。

関連するQ&A