3

問題を始める前に、4 つのキュービック ベジェ ポイントに P0、P1、P2、および P3 を使用し、パラメトリックなので 't' を使用します。また、Googleだけでなく、このサイトでも同様の問題を検索しましたが、見つかりませんでした。これが一般的な質問である場合は申し訳ありません。

問題: これら 2 つのケースでは、3 次ベジエの dx/dt と dy/dt の両方で勾配が 0 になっています。

1: t = 0 and P0 == P1
2: t = 1 and P2 == P3

(1) を説明する例を次に示します。ここで、t = 0 および P0 == P1 です。

t = 0 における次の 3 次ベジエのタンジェント (つまり、dx/dt および dy/dt) を求めます。

(100, 100) (100, 100) (150, 150) (200, 100)

接線を見つけるには、3 次ベジェの一次導関数が必要です。

Cubic Bezier definition
B(t) = (1-t)^3P0 + 3t(1-t)^2P1 + 3t^2(1-t)P2 + t^3P3    
First derivative of a bezier curve (if you'd like to see the steps I used to get here, let me know)
B'(t) = (-3P0 + 9P1 - 9P2 + 3P3)t^2 + (6P0 - 12P1 + 6P2)t + (-3P0 + 3P1)

t = 0 を一次微分方程式に代入すると、次のようになります。

B'(0) = -3P0 + 3P1

最後に、P0 = P1 = (100, 100) であることを思い出してください。したがって、dx/dt と dy/dt は次のようになります。

dx/dt = dy/dt = -3*(100) + 3*(100) = 0

これは、この 3 次ベジエの t = 0 にタンジェントがないことを示しています。グラフにして見ても意味がありません。

ゼロ以外の勾配を取得するために私が行っていることは次のとおりです。ポイント P1、P2、および P3 を 2 次ベジエのように扱い、それらを同等の 3 次ベジエに変換し、t = 0 で 1 次導関数を見つけます。それを避ける方法は?dx/dt と dy/dt が 0 の接線を受け入れるのは難しいと思います。ご協力いただきありがとうございます。

4

2 に答える 2

2

導関数B'(t)atは、ケース 1 (およびケース 2)t = 0では未定義です。t = 1

これが当てはまる理由を確認するために、例で de Casteljau アルゴリズムを「逆方向」に実行して、曲線のパラメーター範囲を から まで 2 倍にすることができt = 0 ... 1ますt = -1 ... 1。これにより、次の 3 次ベジエ曲線の制御点が得られます。

(300,400) (0,-100) (100,200) (200,100)

この曲線をプロットすると、 の元の曲線が表示されますt = 0.5 ... 1t = 0.5また、この延長された曲線には、元の曲線の最初に先端があることもわかります。このカスプは、曲線が開始点で微分できない理由です。

ただし、曲線の正接は導関数とまったく同じではありません。したがって、接線だけが必要な場合は、幸運です。(導関数は曲線に接していますが、曲線の法線に垂直な他のベクトルも同様です。)

曲線の両端の接線は、一般に次と同等であることがわかります。

P1 - P0 at t = 0
P3 - P2 at t = 1

ただし、 if (および if のみ)P0 = P1および/またはP2 = P3の場合、縮退点 (つまり、t = 0ifP0 = P1および/またはt = 1if P2 = P3) での接線は次と同等です。

P2 - P1

B'(t)として評価することで、これが当てはまることを確認できますt->0

実際、延長した曲線を で 2 つに分割し、各辺に方程式をt = 0.5適用すると、先端に 2 つの異なる接線P2 - P1があることがわかります。正反対の方向にあるカーブ ポイントの各半分の接線。これは、導関数がこの時点で定義されていない理由の別の例です。

最後に 1 つ: ポイント P1、P2、P3 を 2 次ベジエのように扱うトリックによって、正しいタンジェントも得られます。ただし、これでは正しい導関数が得られません。

于 2012-05-09T02:55:45.340 に答える
1

この質問はすでに正しく回答されていますが、基礎となる数学を知りたいと思いました:

3 次ベジエの終点の勾配を見つけようとしています。曲線 (つまり、その x と y の値) は t でパラメトリックであるため、x と y を t で個別に微分します。到達するペアは、曲線に沿って移動する点の瞬間的な「速度」と考えることができます。したがって、この場合、ポイントの初期速度はゼロ (またはより正確にはヌル ベクトル) ですが、(ほとんどの場合) 加速度 (またはそれが失敗した場合、少なくとも加速度の変化率) はゼロではないため、ポイントの速度は非ゼロ (非ヌル ベクトル) になるため、それらの座標から移動して曲線をトレースします。

しかし、視覚的に認識される傾きはパラメトリックではありません。つまり、時間に依存しません。IOW 探しているのは dy/dx であり、ペア (dx/dt、dy/dt) ではなく、dx/dt と dy/dt の両方が曲線の t=0 でゼロであることを考えると、dy/dx = (dy/dt)/(dx/dt) = 0/0 不定です。これを評価するには、ロピタルの規則を適用する必要があります。ウィキペディアの記事からルールの詳細な処理を取得できますが、基本的には、そのような不確定な制限を評価するには、分子 f と分母 g を個別に微分して f' と g' を取得し、次に limit(f/g) を取得できることを意味します。 limit(f'/g') に等しい。p0、p1、p2、および p3 がキュービックを定義するポイントである場合、次のようになります。

dy / dt = ypart (3 * (p1 - p0) + 6 * t * (p2 - 2 * p1 + p0) + 3 * t ** 2 * (p3 - 3 * p2 + 3 * p1 - p0) )

dx / dt = xpart (3 * (p1 - p0) + 6 * t * (p2 - 2 * p1 + p0) + 3 * t ** 2 * (p3 - 3 * p2 + 3 * p1 - p0) )

-> (dy/dt) / (dx/dt) = ypart (p1 - p0) / xpart (p1 - p0)

しかし、p0 == p1 の場合、これは不定になります。さて、ロピタルの法則により、

limit(t->0) [ (dy/dt) / (dx/dt) ] = limit(t->0) [ (d2y/dt2) / (d2x/dt2) ]

今:

d2y/dt2 = ypart (6 * (p2 - 2 * p1 + p0) + 6 * t * (p3 - 3 * p2 + 3 * p1 - p0) )

d2x/dt2 = xpart (6 * (p2 - 2 * p1 + p0) + 6 * t * (p3 - 3 * p2 + 3 * p1 - p0) )

t = 0 では、(d2y/dt2) / (d2x/dt2) = ypart ( p2 - 2 * p1 + p0 ) / xpart ( p2 - 2 * p1 + p0 )

しかし、p1 == p0 なので、これは ypart ( p2 - p0 ) / xpart ( p2 - p0 ) となり、これはまさに Naaff があなたに言った結果です。p2 == p0 である場合 (特に 3 次曲線の場合は特に縮退曲線であり、その場合は単なる直線になります!)、これでも不定になり、分子と分母をもう一度微分して取得することができます。 :

limit(dy/dx) = limit(t->0) [ (d3y/dt3) / (d3x/dt3) ] = ypart ( p3 - p0 ) / xpart ( p3 - p0 )

お役に立てば幸いです...(ところで、math.stackexchangeとは異なり、TeXのような表記がここで機能するようには見えません。そうでなければ、数学マークアップを提供します。)

于 2013-01-07T11:30:29.310 に答える