我有一组近似二维曲线的点。我想使用带有numpy和scipy的Python来找到一个与点近似的立方Bézier路径,在这里我指定了两个端点的精确坐标,它返回了另外两个控制点的坐标。
我最初以为scipy.interpolate.splprep()
可以做我想做的事情,但它似乎迫使曲线通过每个数据点(我想您需要插值)。我想我错了。
我的问题类似于这个:How can I fit a Bézier curve to a set of data?,只是他们说他们不想使用numpy。我的首选是在scipy或numpy中找到我需要的已经实现的东西。否则,我计划使用numpy:An algorithm for automatically fitting digitized curves(pdf.page 622)实现从该问题的答案之一链接的算法。
谢谢你的建议!
编辑:我知道三次Bézier曲线不能保证通过所有的点;我想要一条通过两个给定的端点,并且尽可能接近指定的内部点的曲线。
下面是一种使用numpy绘制Bezier曲线的方法:
@keynesiancross要求“在(罗兰的)代码中评论变量是什么”,而其他人完全忽略了这个问题。罗兰德以Bézier曲线作为输入(以获得完美匹配),这使得理解问题和(至少对我来说)解决方案变得更加困难。对于留下残差的输入,与插值的区别更容易看到。这里是解释代码和非Bézier输入——以及一个意外的结果。
这对
fcn = np.cos
很有效,但对log
无效。我有点希望拟合将使用控制点的t分量作为附加自由度,就像我们通过拖动控制点所做的那样:我想,失败的原因是,范数测量的是曲线上的点之间的距离,而不是一条曲线上的点到另一条曲线上最近点之间的距离。
下面是一段用于拟合点的python代码:
一般关于贝塞尔曲线 Animated bezier和 bezierinfo
相关问题 更多 >
编程相关推荐