13

x 座標を指定して、3 次ベジエ曲線の Y 座標を見つけることができる方法が必要です。

私はそれを3次関数として扱い、根を見つけようとするように言っている多くの場所に出くわしました。ただし、Cubic Bezier 曲線の式は (x 座標の場合):

X(t) = (1-t)^3 * X0 + 3*(1-t)^2 * t * X1 + 3*(1-t) * t^2 * X2 + t^3 * X3

私を混乱させるのは、(1-t)値の追加です。たとえば、X 値に乱数を入力すると、次のようになります。

400 = (1-t)^3 * 100 + 3*(1-t)^2 * t * 600 + 3*(1-t) * t^2 * 800 + t^3 * 800

次に並べ替えます。

800t^3 + 3*(1-t)*800t^2 + 3*(1-t)^2*600t + (1-t)^3*100 -400 = 0

(1-t)係数の値はまだわかりません。(1-t)がまだ未知の場合、どのように方程式を解くことになっていますか?

4

5 に答える 5

7

3 次ベジエ曲線を表現する一般的な方法は 3 つあります。

t の関数としての最初の x

x(t) = sum( f_i(t) a_i )
     = (1-t)^3 * x0 + 3*(1-t)^2 * t * x1 + 3*(1-t) * t^2 * x2 + t^3 * x3

次に、x の関数としての y

y(x) = sum( f_i(x) a_i )
     = (1-x)^3 * y0 + 3*(1-x)^2 * x * y1 + 3*(1-x) * x^2 * y2 + x^3 * y3

これらの最初の 2 つは、変数に異なる名前を使用しているだけで、数学的には同じです。

あなたの説明から判断すると、「x座標が与えられたときに、3次ベジエ曲線のY座標を見つけてください。」2 番目の方程式を使用して質問があると思いますが、2 番目の方程式を使用する必要がある場合は、最初の方程式を再配置して解決しようとしています。その場合、並べ替えや解決は必要ありません。x 値を差し込むだけで、解決策が得られます。

醜い難しいケースである第 3 種ケースの方程式がある可能性があります。これは、x パラメータと y パラメータの両方が 3 番目の変数 t の 3 次ベジエです。

x(t) = sum( f_i(t) x_i )
y(t) = sum( f_i(t) y_i )

これがあなたの場合です。お知らせいただければ、問題を解決するために何をする必要があるかを詳しく説明できます。

于 2012-07-03T00:35:19.043 に答える
2

これは公正な CS の質問だと思うので、これをどのように解決したかを示します。指定された x には、複数の y 値が関連付けられている場合があることに注意してください。これが必要な場合は、そうではないことが保証されていたので、どちらが必要かを判断する方法を理解する必要があります.

t を反復処理して、x 値と y 値の配列を生成しました。私は自分の目的のためにかなり高い解像度でそれを行いました。(8 ビットのルックアップ テーブルを生成しようとしていたので、約 1000 ポイントを使用しました。) 配列に格納する次の x 座標と次の y 座標のベジェ方程式に t を差し込んだだけです。全体を生成したら、配列をスキャンして、最も近い 2 つの x 値を見つけました。(または、完全に一致する場合は、それを使用します。) 次に、必要な y 値を取得するために、その非常に小さな線分で線形補間を行いました。

于 2012-07-03T00:34:25.300 に答える
1

式をさらに発展させると、(1 - t)要因が取り除かれます

実行する場合:

expand(800*t^3 + 3*(1-t)*800*t^2 + 3*(1-t)^2*600*t + (1-t)^3*100 -400 = 0);

wxMaximaまたはMaplet (ただし、これにはパラメーターを追加する必要があります) のいずれかで、次のようになります。

100*t^3 - 900*t^2 + 1500*t - 300 = 0

の新しい 3 次方程式を解きます ( 3 次方程式の公式tを使用できます) 。tx

x = (x4 - x0) * t      (asuming x4 > x0) 
于 2012-07-03T01:06:00.530 に答える
-1

そのため、x座標が与えられたときに、3次ベジエ曲線のY座標を見つけることができる何らかの方法を探していました。

ポイント (0, 0) と (0, 100) の間の 3 次ベジェ曲線を考えてみましょう。コントロール ポイントは (0, 33) と (0, 66) です。与えられた X に対して無限の数の Y があります。そのため、任意の 3 次ベジエについて X を与えられた Y を解く方程式はありません。

堅牢なソリューションを得るには、 De Casteljau のアルゴリズムから始めることをお勧めします

個々のセグメントが直線に近づくまで、曲線を再帰的に分割します。次に、これらのさまざまな線分が x を横切るかどうか、または探している x に対応する x を持つ垂直線分であるかどうかを検出できます (上記の例)。

于 2013-03-21T10:01:55.267 に答える