我正在研究一种通用机器人,能够执行人类通常会做的日常任务。
其中一个类是'mouse',它处理所有与鼠标相关的命令,如移动,按下按钮等等。
我读过很多关于Bezier Splines(Bezier Curves)的文章,但我只是听不懂。
根据我的阅读,我需要4个控制点。
Point0 = Start X
Point1 = Unknown
Point2 = Unknown
Point3 = End X
如何找到未知坐标,以便鼠标移动为平滑曲线?
我非常感谢您的时间,我期待着回复。
答案 0 :(得分:2)
任何两个控制点将给出平滑的Bézier曲线,并且起点和终点之间的直线也将是平滑曲线。您实际上可能会问两个问题中的一个或两个:
1)给定一条我希望鼠标跟随的路径,如何沿路径计算点?您需要路径的参数方程。沿直线段PQ
的点的参数方程是
r(t) = P + tPQ
其中P
是起点,PQ
是线段的矢量形式,t
从0变为1.
2)如何找到Bézier控制点,使我的鼠标遵循“自然”路径?这个非常主观;没有正确的答案,因为正如我所说,任何两个控制点将产生一个连续的路径。您可以简单地沿着路径选择控制点1/3和2/3,例如,坐标的5%。然后,您将使用参数Bézier方程计算沿曲线的点。摆弄那5%的数字来获得令你高兴的东西。
答案 1 :(得分: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点都是按某种比例扭曲的鼠标位置...如果你没有使用比例也可以......
当您使用鼠标绘制时,您可以在从开始移动一些常量长度后添加下一个贝塞尔曲线
如果您需要更精确的鼠标路径aproximation,那么降低曲线段的长度常数。如果还不够,那么你必须使用4点插值转换为4点贝塞尔曲线,这不是那么简单。
如果你不受bezier使用插值的限制,那么所有的点都是鼠标位置......
希望有所帮助