2011-12-30 5 views
1

私は人間が普通にやる日々の作業を行うことができる普遍的なロボットに取り組んでいます。ベジエ曲線とJavaロボットクラス

クラスの1つは 'マウス'で、これはマウスの移動、ボタンの押下などのすべてのコマンドを処理します。

私はベジェスプライン(ベジェ曲線)について多くのことを読んだことがありますが、わかりません。

私が読んだところから、私は4つのコントロールポイントが必要です。

Point0 = Start X 
Point1 = Unknown 
Point2 = Unknown 
Point3 = End X 

マウスの動きが滑らかな曲線になるように、未知の座標を見つけるにはどうすればよいですか?

私はあなたの時間を非常に感謝し、私は応答を楽しみにしています。

+1

を支援する理由はない願っています...マウスの位置ですちょうどラインを使用しますか? – Randy

+0

こんにちはRandy、私は現実的な動きが必要です。ドットを動かすだけではロボットはあまりにもロボットです。 –

答えて

2

2つのコントロールポイントは、定義によって滑らかなベジエ曲線を与え、開始点と終了点の間の直線も滑らかな曲線になります。実際には次の2つの質問のいずれかまたは両方を尋ねているかもしれません。

1)私はマウスに従いたいと思っていますが、どのようにしてパスに沿ってポイントを計算しますか?パスのパラメトリック方程式が必要です。直線セグメントPQ沿った点に対するパラメトリック方程式は、PQ線分のベクトル形式である、Pが開始点である

r(t) = P + tPQ 

であり、そしてt 1.

2)0から変化します私のマウスが「自然な」経路をたどるようなBézierコントロールポイントを見つけるにはどうすればよいですか?これは非常に主観的です。私が言ったように、の2つのコントロールポイントは連続したパスを生成するため、正しい答えはありません。たとえば、座標の5%を摂動させて、パスに沿って1/3と2/3の制御点を選択するだけです。次に、パラメトリックベジエ方程式を使って曲線に沿った点を計算します。あなたを喜ばせる何かを得るためにその5%のフィギュアを持つフィドル。

+0

迅速な対応に感謝します。 小さなサンプルを書き上げる時間があると思いますか? 私は数時間のうちにこれを研究していました。私は髪を引き出す準備ができています。 –

+0

小さな例のうち、今ですか?あなたは本当に尋ねている質問をあなたに教えてくれませんでした。 –

+0

申し訳ありませんが、基本的にAとBの2つの点を開始して終了し、コントロールポイントを生成し、直線パスを次のような曲線に変えたいとします: http://mathworld.wolfram.com/images/eps -gif/Bezier_700.gif –

1

複数の4点ベジェから曲線をサンプリングする方がよいでしょう。

Bezier1(A0、A1、A2、A3)... a0..a3(ベクトルとして)ポイントの座標で、前の曲線の

: がスムーズにこれを実行する必要がある2つの4点ベジエに参加しますBezier2(B0、B1、B2、B3)... b0..b3この曲線

B0 = A3 ...連続C0を確実にするために

B1 = B0 +(A3の(ベクトルとしての)点の座標であります-a2)...あなたはA0を設定することができます最初のカーブのためのマウス

の継続C1

B2 =不明

B3 =位置、A1 =マウスの位置

を確保するために、すべてのB3ポイントが

マウスの位置です

すべてのb2ポイントはマウスの位置があるスケールで歪められています...スケールを使用していない場合も同様です...

マウスで描画すると一定の長さを最初から移動させた後に次のベジェ曲線を追加することができます。

より正確なマウスパスの近似が必要な場合は、曲線セグメントの長さ定数を小さくします。十分でない場合は、4点補間から4点ベジェへの変換を使用する必要があります。これは単純ではありません。

あなたが代わりにベジェ利用補間によって制限されていない場合は、すべてのポイントは、それが目的のボタンに現在の場所から移動する程度であれば

が、それは

関連する問題