ベジェ曲線の式

数式の表示を試してみたかっただけ

1. 2次のベジェ曲線

\[\begin{align} P_1 & \cdots 端点 \\ P_2 & \cdots 制御点 \\ P_3 & \cdots 端点 \end{align}\]

として

\[\begin{align} P = (1 - t)^2P_1 + 2(1 - t)tP_2 + t^2P_3 \cdots (1) \\ 0 \leqq t \leqq 1 \end{align}\]

例えば、2次元平面上の点

\[\begin{align} P_1 &= (x_1, y_1) \\ P_2 &= (x_2, y_2) \\ P_3 &= (x_3, y_3) \\ P &= (x, y) \end{align}\]

とすると \(x, y\) はそれぞれ

\[\begin{align} x &= (1 - t)^2x_1 + 2(1 - t)tx_2 + t^2x_3 \\ y &= (1 - t)^2y_1 + 2(1 - t)ty_2 + t^2y_3 \end{align}\]

となる。

2. 3次のベジェ曲線

\[\begin{align} P_1 & \cdots 端点 \\ P_2 & \cdots 制御点 \\ P_3 & \cdots 制御点 \\ P_4 & \cdots 端点 \end{align}\]
\[\begin{align} P = (1 - t)^3P_1 + 3(1 - t)^2tP_2 + 3(1 - t)t^2P_3 + t^3P_4 \cdots (2) \\ 0 \leqq t \leqq 1 \end{align}\]

例えば、2次元平面上の点

\[\begin{align} P_1 &= (x_1, y_1) \\ P_2 &= (x_2, y_2) \\ P_3 &= (x_3, y_3) \\ P_4 &= (x_4, y_4) \\ P &= (x, y) \end{align}\]

とすると \(x, y\) はそれぞれ

\[\begin{align} x &= (1 - t)^3x_1 + 3(1 - t)^2tx_2 + 3(1 - t)t^2x_3 + t^3x_4 \\ y &= (1 - t)^3y_1 + 3(1 - t)^2ty_2 + 3(1 - t)t^2y_3 + t^3y_4 \end{align}\]

となる。

3. 3点を通る2次のベジェ曲線を求める

\[\begin{align} P_1 & \cdots 端点 \\ P_2 & \cdots 求める制御点 \\ P_3 & \cdots 端点 \\ P_a & \cdots 通過点 \end{align}\]

のときに \(P_1, P_a, P_3\) を通るベジェ曲線の制御点 \(P_2\) を求める。

ただし、 \(P_a\) は \(t = 0.5\) の時の通過点とする。

(1)の2次のベジェ曲線の式から \(t = 0.5\) のとき

\[\begin{align} P_a &= 0.25P_1 + 0.5P_2 + 0.25P_3 \\ 0.5P_2 &= P_a - 0.25(P_1 + P_3) \\ P_2 &= 2P_a - 0.5(P_1 + P_3) \\ \left(\begin{array}{c}x_2 \\ y_2\end{array}\right) &= 2\left(\begin{array}{c}x_a \\ y_a\end{array}\right) - 0.5\left[ \left(\begin{array}{c}x_1 \\ y_1\end{array}\right) + \left(\begin{array}{c}x_3 \\ y_3\end{array}\right) \right] \end{align}\]

4. 4点を通る3次のベジェ曲線を求める

2次元平面上の点

\[\begin{align} P_1 & \cdots 端点 \\ P_2 & \cdots 求める制御点 \\ P_3 & \cdots 求める制御点 \\ P_4 & \cdots 端点 \\ P_a & \cdots 通過点 \\ P_b & \cdots 通過点 \end{align}\]

のときに \(P_1, P_a, P_b, P_4\) を通るベジェ曲線の制御点 \(P_2, P_3\) を求める。

ただし、 \(P_a\) は \(t = 1 / 3\) の時の通過点、 \(P_b\) は \(t = 2 / 3\) の時の通過点とする。

(2)の3次のベジェ曲線の式から \(t = 1 / 3\) のとき

\[\begin{align} P_a &= (\frac{2}{3})^3P_1 + (\frac{2}{3})^2P_2 + 2(\frac{1}{3})^2P_3 + (\frac{1}{3})^3P_4 \\ 27P_a &= 8P_1 + 12P_2 + 6P_3 + P_4 \\ \frac{27P_a - 8P_1 - P_4}{6} &= 2P_2 + P_3 \end{align}\]

\(C_a = \frac{27P_a - 8P_1 - P_4}{6}\) とおいて

\[\begin{align} 2P_2 + P_3 - C_a = 0 \cdots (3) \end{align}\]

とする。

\(t = 2 / 3\) のとき

\[\begin{align} P_b &= (\frac{1}{3})^3P_1 + 2(\frac{1}{3})^2P_2 + (\frac{2}{3})^2P_3 + (\frac{2}{3})^3P_4 \\ 27P_b &= P_1 + 6P_2 + 12P_3 + 8P_4 \\ \frac{27P_b - P_1 - 8P_4}{6} &= P_2 + 2P_3 \end{align}\]

\(C_b = \frac{27P_b - P_1 - 8P_4}{6}\) とおいて

\[P_2 + 2P_3 - C_b = 0 \cdots (4)\]

とする。

(3)(4)より

\[\begin{align} \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}\begin{bmatrix} P_2 \\ P_3 \end{bmatrix} &= \begin{bmatrix} C_a \\ C_b \end{bmatrix} \\ \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}^{-1}\begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}\begin{bmatrix} P_2 \\ P_3 \end{bmatrix} &= \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix}^{-1}\begin{bmatrix} C_a \\ C_b \end{bmatrix} \\ \begin{bmatrix} P_2 \\ P_3 \end{bmatrix} &= \frac{1}{3}\begin{bmatrix} 2 & -1 \\ -1 & 2 \end{bmatrix}\begin{bmatrix} C_a \\ C_b \end{bmatrix} \\ \begin{bmatrix} P_2 \\ P_3 \end{bmatrix} &= \frac{1}{3}\begin{bmatrix} 2C_a - C_b \\ -C_a + 2C_b \end{bmatrix} ... (3) \end{align}\]

(3)に \(C_a, C_b\) を代入して元に戻すと

\[\begin{align} P_2 &= \frac{1}{3}(2\frac{27P_a - 8P_1 - P_4}{6} - \frac{27P_b - P_1 - 8P_4}{6}) \\ P_2 &= \frac{1}{3}(\frac{54P_a - 16P_1 - 2P_4 - 27P_b + P_1 + 8P_4}{6}) \\ P_2 &= \frac{1}{3}(\frac{54P_a - 27P_b - 15P_1 + 6P_4}{6}) \\ P_2 &= \frac{1}{6}(18P_a - 9P_b - 5P_1 + 2P_4) \\ \end{align}\]
\[\begin{align} P_3 &= \frac{1}{3}(-\frac{27P_a - 8P_1 - P_4}{6} + 2\frac{27P_b - P_1 - 8P_4}{6}) \\ P_3 &= \frac{1}{3}(\frac{-27P_a + 8P_1 + P_4 + 54P_b - 2P_1 - 16p_4}{6}) \\ P_3 &= \frac{1}{3}(\frac{-27P_a + 54P_b + 6P_1 - 15p_4}{6}) \\ P_3 &= -\frac{1}{6}(9P_a - 18P_b - 2P_1 + 5P_4) \end{align}\]

よって求める制御点 \(P_2, P_3\) は

\[\begin{alignat}{3} P_2 &= &\frac{1}{6}(18P_a - 9P_b - 5P_1 + 2P_4) \\ P_3 &= -&\frac{1}{6}(9P_a - 18P_b - 2P_1 + 5P_4) \\ \end{alignat}\]