2011-12-30 23 views
1

我正在研究一種通用機器人,能夠執行人類通常會做的日常任務。貝塞爾曲線與Java機器人類

其中一個類是「鼠標」,它處理所有鼠標相關的命令,如移動,按下按鈕等等。

我讀過很多關於貝塞爾曲線(Bezier曲線)的,但我只是不明白它。

從我讀過的,我需要4個控制點。

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

如何找到未知的座標,所以我的鼠標移動將是一條平滑的曲線?

我非常感謝您的時間,我期待着您的回覆。

+1

如果它是關於從當前位置移動到需要的按鈕,爲什麼不只用一條線? – Randy 2011-12-30 15:40:28

+0

蘭迪你好,我需要現實的運動。移動點實在太機器人了。 – 2011-12-30 19:11:15

回答

2

任意根據定義,兩個控制點可以給出平滑的Bézier曲線,並且起點和終點之間的直線也將是平滑曲線。您可能實際上是在提出以下兩個問題中的一個或兩個:

1)給定一條我希望鼠標跟隨的路徑,如何計算路徑上的點?您需要路徑的參數方程。用於沿直線段PQ點A參數方程是

r(t) = P + tPQ 

其中P是起點,PQ是線段的矢量形式,和t從0到1

2)而變化如何找到Bézier控制點,以便我的鼠標遵循「自然」路徑?這個很主觀;沒有正確答案,因爲正如我所說,任何兩個控制點都會產生連續的路徑。你可以簡單地選擇沿着路徑的控制點1/3和2/3,例如其座標的5%被擾動。然後,您將使用參數Bézier方程來計算曲線上的點。擺弄這個5%的數字來得到讓你滿意的東西。

+0

感謝您的快速響應。 你覺得你有時間寫了一個小例子嗎? 我一直在研究這個用於在小時小時,我準備拉我的頭髮,嘿嘿。 – 2011-12-30 15:51:49

+0

現在的小例子?你沒有告訴我你真的在問什麼問題。 – 2011-12-30 15:56:12

+0

對不起,基本上我想利用兩個點,A和B,啓動和結束時,生成所述控制點,並打開直線路徑成曲線,例如: http://mathworld.wolfram.com/images/eps -gif/Bezier_700.gif – 2011-12-30 15:57:39

1

嗨,你最好從多於一個4點bezier曲線樣本。 順利連接兩個4點濟耶,你需要這樣做:

Bezier1(A0,A1,A2,A3)... a0..a3是以前的曲線的點座標(如矢量)

Bezier2(B0,B1,B2,B3)... b0..b3是該曲線的點的座標(作爲載體)

B0 = A3 ...以確保連續性C0

B1 = B0 +(A3 -a2) ...保證連續性C1

B2 =未知

B3 =你可以設置A0第一條曲線,A1 =鼠標位置的鼠標

的位置

所有B3點鼠標位置

一些規模

所有B2點鼠標位置扭曲......如果你不使用它的規模也行......

當你用鼠標畫

你可以,如果你需要鼠標路徑更精確aproximation因此降低長度常數曲線段某常數長度是指從開始

移動後添加下一個貝塞爾曲線。如果它不夠,那麼你必須使用4點插值轉換爲4點貝塞爾,這不是那麼簡單。

,如果你沒有被貝塞爾利用插值而不是限制,那麼所有點鼠標位置...

希望它有助於