1

3 次ベジエ p1,p2,p3,p4 をライン p1,p4 に射影します。p2 または p3 が p1 と p4 の間の線分に投影されない場合、曲線はアンカー ポイントから膨らみます。曲線の接線がアンカー ラインに垂直な場合の T 値を計算する方法はありますか?

これは、投影された曲線が線分 p1、p4 の中心から最も離れている T 値を見つけることとも言えます。p2 と p3 が線分に投影されると、解はそれぞれ 0 と 1 になります。もっと興味深いケースを解くための方程式はありますか?

T 値は、アンカー ライン セグメントからマップされたコントロール ポイントまでの距離のみに依存するようです。

推測を精緻化することで値を決定できますが、もっと良い方法があることを願っています。

編集:

値 x1、y1、...、x4、y4 を持つ 2d の p1、..、p4 から始めて、Philippe からの回答に基づいて次のコードを使用します。

dx = x4 - x1;
dy = y4 - y1;
d2 = dx*dx + dy*dy;
p1 = ( (x2-x1)*dx + (y2-y1)*dy ) / d2;
p2 = ( (x3-x1)*dx + (y3-y1)*dy ) / d2;
tr = sqrt( p1*p1 - p1*p2 - p1 + p2*p2 );
t1 = ( 2*p1 - p2 - tr ) / ( 3*p1 - 3*p2 + 1 );
t2 = ( 2*p1 - p2 + tr ) / ( 3*p1 - 3*p2 + 1 );

私が見たサンプルでは、​​正しくなる前に 1.0 から t2 を引く必要がありました。

4

1 に答える 1

1

1D キュービック ベジエ曲線がP0 = 0ありP3 = 1、その曲線が次のようになっているとします。

P(t) = b0,3(t)*0 + b1,3(t)*P1 + b2,3(t)*P2 + b3,3(t)*1

次数 3 のバーンスタイン多項式はどこbi,3(t)にありますか。次に、これが最小および最大である場所の値を探しているので、次の式を導き出します。tP(t)

P'(t) = b1,3'(t)*P1 + b2,3'(t)*P2 + b3,3'(t)
      = (3 - 12t + 9t^2)*P1 + (6t - 9t^2)*P2 + 3t^2
      = 0

これは閉じた形式ですが、自明ではありません。WolframAlpha によると、3P1 - 3P2 +1 != 0次の場合:

t = [2*P1 - P2 +/- sqrt(P1^2-P1*P2-P1+P2^2)] / (3*P1 - 3*P2 + 1)

それ以外の場合は次のとおりです。

t = 3P1 / (6P1 - 2)

一般的な n 次元の 3 次ベジエ P0*、P1*、P2*、P3* の計算:

P1 = proj(P1*, P03*) / |P3* - P0*|
P2 = proj(P2*, P03*) / |P3* - P0*|

は からとを通る直線上に投影された点までproj(P, P03*)の符号付き距離です。P0*PP0*P3*

(私はこれをチェックしていないので、私の推論に誤りがないことを確認してください。)

于 2010-04-20T05:42:04.053 に答える