アプリ版:「スタンプのみでお礼する」機能のリリースについて

ベジェ曲線(3次関数)の長さを求めようと思っています。

p,q,r,sを位置ベクトルとする。
ベジェ曲線(p-q-r-s)の位置ベクトルbは
b=p+t(-3p+3q+t(3p-6q+3r+t(-p+3q-3r+s))) (定義域0≦t≦1)

例えば4点(10,20)-(20,40)-(80,10)-(50,80)で表現されるベジェ曲線は
bx=-140(t^3)+150(t^2)+30t+10
bx=150(t^3)-150(t^2)+60t+20
となります

この曲線の長さを求める式を教えてください。

A 回答 (5件)

参考までに


bx=f(t)=-140(t^3)+150(t^2)+30t+10
by=g(t)=150(t^3)-150(t^2)+60t+20
として
Lの式を計算すると
L=∫[0,1]10√{225(t^6)-450(t^5)+2169(t^4)-2640(t^3)+624(t^2)+204t+13}dt (0<=x<=1)}dt
となります。この定積分を解析に計算する事は困難なので、数値積分して求めないといけませんね。
数値積分した結果は
L≒71.466
となりました。
    • good
    • 1
この回答へのお礼

>この定積分を解析に計算する事は困難なので、数値積分して求めないといけませんね。
そうですか。ベジェ曲線の長さを求めるプログラムを組んでいるのですが、その「困難」のところで突っ掛かっていました。数値積分でなるべく正確な値を出そうとすると複雑になり、処理にも時間がかかるので解析できないかと思ったのですが、やはり「困難」なんですね。参考になりました。ありがとうございました。

お礼日時:2008/12/02 00:08

書くのを忘れたので、訂正の補足をします。


A#3の中のLの積分の式の後に
意味不明の
> (0<=x<=1)}dt
は、消し忘れですので、削除して下さい。
    • good
    • 0

積分を解析的に行うとは、不定積分自体が不可能なので、不定積分を求めてから、積分の上限と下限を代入して差を取るといった積分が行えないという事です。

このことを指して困難といったのです。
> その「困難」のところで突っ掛かっていました。
数値積分ならソフトあるいは積分のプログラムを組んでおけば、関数を入れるだけで必要な精度で、瞬時に積分結果を出してくれます。そういった意味では困難性はないですね。
(数値積分は文字を含んだ積分ができないことが欠点ですね。)
    • good
    • 0

#1です。


A#1で4点が直線上とは極端にぶれる点列で並んだ場合は
>4点中、通るのは最初と最後の点だけです。特に3番目の点は全然ベジェ曲線から外れた所にあります。
2点目、3点目はベジェ曲線とは大きく外れることもありえるようですから、必ずしも間違いとはいえません(bx,byの式をチェックしていませんので)ので
>例のベジェ曲線の式間違っていませんか?
は取り消しておきます。
下の式はbxでなく,byですね。

A#1の曲線の長さLの公式で積分を実行してみて下さい。
    • good
    • 0

媒介変数表現の曲線の長さLは


x=f(t),y=g(t) (定義域0≦t≦1)
とおくと
L=∫[0,1]√[{f'(t)}^2+{g'(t)}^2]dt
で計算できます。この公式についての詳細は参考URLをご覧下さい。

例のベジェ曲線の式間違っていませんか?
bx=
by=
4点中、通るのは最初と最後の点だけです。特に3番目の点は全然ベジェ曲線から外れた所にあります。
間違った曲線の式を積分しても曲線の長さが求まりませんね。
ベジェ曲線の式をチェックしてみてください。

参考URL:http://aozoragakuen.sakura.ne.jp/taiwa/taiwaNch0 …
    • good
    • 0

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