プロが教える店舗&オフィスのセキュリティ対策術

パソコンの本を読んでいて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
という式はどのように導き出すのでしょうか?
また
ベジェ曲線についてもどのように導き出すのでしょうか?

A 回答 (3件)

合ってるかどうかは?ですが…



【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バタッ
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/15 06:13

がんばって式をこねくり回してみましたけど、


何でこんな式になるのかは知る必要なかったような気が…

曲線の始点を(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
で座標を計算して結んでいけば描けます。
と言っているだけだと思いますが…
    • good
    • 0

こんなことをしたことありませんか?


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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/11/15 06:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!