2次関数を3次ベジエで近似
2次関数 f(x) = pK ( x - pX ) ^ 2 + pY の定義域 [ pP, pQ ] で描かれる曲線を3次ベジエで近似しようとするとき、 2つのコントロールポイントの座標を以下のプログラムのように求めればよい。 x1, y1 と x2, y2
1 double wPQ = pP * pQ; 2 double wPP = pP * pP; 3 double wQQ = pQ * pQ; 4 double x1 = ( ( wPQ - 2 * wPP + wQQ ) / 3 ) / ( pQ - pP ); 5 double x2 = ( ( wPQ + wPP - 2 * wQQ ) / 3 ) / ( pP - pQ ); 6 double wA = pK * ( pQ + pP - 2 * pX ); 7 double wB = pY + pK * ( pX * pX - ( wPP + wPQ + wQQ ) / 3 ); 8 double y1 = x1 * wA + wB; 9 double y2 = x2 * wA + wB;
考え方 線分 p->q を L とする。( wA は L の傾き) L に平行な直線で、f(x)に接する直線を M とする。 L からみて M 側にあり、L と M の距離の 4/3 倍の距離にある L に平行な直線を N とする。 ( y = wA * x + wB ) この N の上に2つのコントロールポイントをおく。 N と x = pP における接線との交点が1つめのコントロールポイント N と x = pQ における接線との交点が2つめのコントロールポイント である。
pP = 0, pQ = 1 のとき、
1 double x1 = 1. / 3.; 2 double x2 = 2. / 3.; 3 double wN = pY + pK * ( pX * pX - 1. / 3. ); 4 double y1 = x1 * pK + wN; 5 double y2 = x2 * pK + wN;