5

(startX, startY) から (anchorX, anchorY) として記述され、コントロール ポイント (controlX, controlY) を使用する 2 次ベジエ曲線があります。

2 つの質問があります。

(1) x 点に基づいてその曲線上の y 点を決定したい。

(2) 次に、ベジェ (ベジェ曲線上の 2 つの中間点 (startX'、startY'、anchorX'、anchorY') によって定義される) の線分が与えられた場合、その線分の制御点を知りたい元のベジエと正確に重なるようにします。

なんで?最適化のためにこの情報が必要です。水平ベジエをたくさん描いています。ベジエが画面よりも大きい場合、レンダリング エンジンは表示範囲を超えてレンダリングすることになるため、パフォーマンスが低下します。この質問への答えは、目に見えるものをレンダリングするだけです。

4

2 に答える 2

13

パート1

二次ベジエの式は次のとおりです。

B (t) = a (1-t) 2     + 2 b t(1-t) + c t 2 
     = a (1-2t+t 2 ) + 2 b t - 2 b t 2 + c t 2 
     = ( a -2 b + c )t 2 +2( b - a )t + a

太字はベクトルを示します。B x (t) が与えられると、次のようになります。

x = ( a x -2 b x + c x )t 2 +2( b x - a x )t + a x

ここで、v xはvの x コンポーネントです。

二次方程式によると、

     -2( b x - a x ) ± 2√(( b x - a x ) 2 - a x ( a x -2 b x + c x ))
t = ----------------------------------------------
             (2 a x ( a x -2 b x + c x ))
             
     a x - b x ± √( b x 2 - a x c x )
  = ----------------------
         a x ( a x -2 b x + c x )

解が存在すると仮定すると、その t を元の方程式に戻して、特定の x におけるB (t) の他の成分を取得します。

パート2

最初のベジエ曲線の一部と一致する 2 番目のベジエ曲線を生成するのではなく (今はシンボルをクランチしたくありません)、パラメトリック パラメータのドメインを [0,1] の適切なサブ間隔に単純に制限できます。つまり、パート 1 を使用して、x の 2 つの異なる値に対する t の値を見つけます。これらの t 値を i および j と呼びます。t ∈ [i,j] に対してB (t) を描画します。同様に、t ∈ [0,1] に対してB (t(ji)+i) を描画します。

于 2010-04-16T21:55:55.747 に答える