基本的に、下の画像が示すように、openGLの3点の間に曲線を描きたいと思います。4ポイントを使用してベジェ曲線を描くのに役立つコードのセグメントをいくつか見つけましたが、3ポイントでは実際には成功しませんでした。
質問する
3139 次
2 に答える
7
ベジエ曲線の定義から、次の式が得られます (x、y コンポーネントごとに)。
x(t) = (1-t)^3*p1x + 3*t*(1-t)^2*c1x + 3*t^2*(1-t)*c3x + t^3*p3x
y(t) = (1-t)^3*p1y + 3*t*(1-t)^2*c1y + 3*t^2*(1-t)*c3y + t^3*p3y
あなたの場合、中間点を知っています(p2x,p2y)
。同じ値c1x
を 持つと仮定することもできます。c2x
そしてそれc1y
も c2y
同じ値を持っています
したがって、t=0.5 で次の方程式が得られます。
p2x = (3/4)*c1x+(p1x+p3x)/8
p2y = (3/4)*c1y+(p1y+p3y)/8
c1x=c2x
とc1y=c2y
で解決される
c1x = c2x = -(p1x-8*p2x+p3x)/6
c1y = c2y = -(p1y-8*p2y+p3y)/6
ポイントに関して使用する最終的なベジェ方程式を与える(p1x,p1y)
、(p2x,p2y)
および(p3x,p3y)
:
x(t) = (1-t)^3 * [p1x]
+ 3*t*(1-t)^2 * [-(p1x-8*p2x+p3x)/6]
+ 3*t^2*(1-t) * [-(p1x-8*p2x+p3x)/6]
+ t^3 * [p3x]
y(t) = (1-t)^3 * [p1y]
+ 3*t*(1-t)^2 * [-(p1y-8*p2y+p3y)/6]
+ 3*t^2*(1-t) * [-(p1y-8*p2y+p3y)/6]
+ t^3 * [p3y]
概要
4 つのコントロール ポイントを試す
( p1x, p1y )
( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )
( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )
( p3x, p3y )
p1=(0,0)
、 、p2=(2,2)
で作成した例を次に示しp3=(4,-1)
ます。以下のコントロールポイントを計算しました
( 0, 0 )
( 2, 17/6 )
( 2, 17/6 )
( 4, -1)
以下に結果を示します。
于 2012-07-19T20:18:58.290 に答える
1
エルミートスプラインが必要なようです。
于 2012-07-19T19:17:24.310 に答える