0

二次ベジエ曲線の長さを求める

60
0
$$\newcommand{threeMat}[9]{\left( \begin{array}{ccc} {#1} & {#2} & {#3} \\[5pt] {#4} & {#5} & {#6} \\[5pt] {#7} & {#8} & {#9} \end{array} \right)} \newcommand{twoMat}[4]{\left( \begin{array}{cc} {#1} & {#2} \\[5pt] {#3} & {#4} \end{array} \right)} $$

 二次ベジエ曲線の長さを求めます。これは積分で求めることができます。応用は特に考えていません。興味があって調べました。
quadraticCurveLength

二次ベジエ曲線 二次ベジエ曲線

 まず、二次ベジエ曲線とは3つのコントロールポイント:

$$ (a_0, b_0, c_0),~~(a_1, b_1, c_1),~~(a_2, b_2, c_2) $$
により、次のように表される曲線である:

$$\begin{align*} x &= a_0(1-t)^2 + 2a_1 t(1-t) + a_2t^2, \\[5pt] y &= b_0(1-t)^2 + 2b_1 t(1-t) + b_2t^2, \\[5pt] z &= c_0(1-t)^2 + 2c_1 t(1-t) + c_2t^2. \end{align*} $$
ただし$~t_0\leq t \leq t_1~$とする。曲線の長さを与える式を求める。
 はじめに、

$$ u_0 = a_0 - a_1,~~~v_0 = b_0-b_1,~~~w_0 = c_0-c_1 $$
とおく。さらに、

$$ u_1 = a_0-2a_1+a_2,~~v_1=b_0-2b_1+b_2,~~w_1=c_0-2c_1+c_2 $$
とおく。そして、

$$ A={u_1}^2 + {v_1}^2 + {w_1}^2, $$
$$ B=u_1u_0 + v_1v_0 + w_1w_0, $$
$$ C={u_0}^2 + {v_0}^2 + {w_0}^2, $$
$$ D=AC-B^2 $$
とおく。シュワルツの不等式より、$~D\geq0~$がわかる。
 このとき、求める曲線の長さは次のようになる。まず補助関数を用意する。

$$ g(x) = \log(x + \sqrt{x^2+1}) + x\sqrt{x^2 + 1}. $$
曲線の長さ$~L~$は、まず$~A>0~$かつ$~D>0~$のとき、

$$ L = \frac{D}{A\sqrt{A}} \left( g\left( \frac{At_1-B}{\sqrt{D}} \right) - g\left( \frac{At_0-B}{\sqrt{D}} \right) \right). $$
次に$~A>0~$かつ$~D=0~$の場合は、

$$ L = \frac{1}{A\sqrt{A}} \left( (At_1-B)|At_1-B| - (At_0-B)|At_0-B| \right). $$
最後に$~A=0~$の場合、$~B~$$~D~$も0になるので、

$$ L=2\sqrt{C}(t_1-t_0) $$
となる。
 以上です。

投稿日:2023710
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。

投稿者

黒狐
黒狐
33
3892
数学ちょっと好きです!

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中