0

我正在研究一个通用机器人,它能够执行人类通常会执行的日常任务。

其中一个类是“鼠标”,它处理所有与鼠标相关的命令,例如移动、按下按钮等。

我已经阅读了很多关于 Bezier Splines (Bezier Curves) 的内容,但我就是不明白。

根据我的阅读,我需要 4 个控制点。

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

如何找到未知坐标,使我的鼠标移动成为平滑曲线?

非常感谢您的宝贵时间,并期待您的回复。

4

2 回答 2

2

根据定义,任何两个控制点都会给出平滑的贝塞尔曲线,并且起点和终点之间的直线也将是平滑曲线。您实际上可能会问两个问题中的一个或两个:

1)给定我希望鼠标跟随的路径,我如何计算沿路径的点?您需要路径的参数方程。沿直线段的点的参数方程PQ

r(t) = P + tPQ

其中P是起点,PQ是线段的向量形式,t从 0 到 1 变化。

2)如何找到贝塞尔控制点,使我的鼠标遵循“自然”路径?这是非常主观的;没有正确的答案,因为正如我所说,任何两个控制点都会产生一条连续的路径。您可以简单地选择沿路径的控制点 1/3 和 2/3,例如,受到其坐标的 5% 的干扰。然后,您将使用参数化贝塞尔方程来计算曲线上的点。摆弄那 5% 的数字以获得令你满意的东西。

于 2011-12-30T15:48:05.970 回答
1

嗨,您最好从一个以上的 4 点贝塞尔曲线中采样曲线。要顺利加入两个 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 点的鼠标位置都被某种比例扭曲了……如果你不使用比例也可以……

当你用鼠标绘制时,你可以在从一开始移动一些恒定长度后添加下一条贝塞尔曲线

如果您需要更精确的鼠标路径近似值,请降低曲线段的长度常数。如果还不够,则必须使用 4 点插值到 4 点贝塞尔曲线的转换,这并不简单。

如果您不受贝塞尔曲线的限制,请改用插值,那么所有点都是鼠标位置...

希望能帮助到你

于 2013-06-25T17:52:46.263 回答