1

基本的に、下の画像が示すように、openGLの3点の間に曲線を描きたいと思います。4ポイントを使用してベジェ曲線を描くのに役立つコードのセグメントをいくつか見つけましたが、3ポイントでは実際には成功しませんでした。

ここに画像の説明を入力してください

4

2 に答える 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そしてそれc1yc2y同じ値を持っています

したがって、t=0.5 で次の方程式が得られます。

p2x = (3/4)*c1x+(p1x+p3x)/8
p2y = (3/4)*c1y+(p1y+p3y)/8

c1x=c2xc1y=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 つのコントロール ポイントを試す

  1. ( p1x, p1y )
  2. ( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )
  3. ( -(p1x-8*p2x+p3x)/6, -(p1y-8*p2y+p3y)/6 )
  4. ( p3x, p3y )

p1=(0,0)、 、p2=(2,2)で作成した例を次に示しp3=(4,-1)ます。以下のコントロールポイントを計算しました

  1. ( 0, 0 )
  2. ( 2, 17/6 )
  3. ( 2, 17/6 )
  4. ( 4, -1)

以下に結果を示します。

導出プロット

于 2012-07-19T20:18:58.290 に答える
1

エルミートスプラインが必要なようです。

于 2012-07-19T19:17:24.310 に答える