我需要对具有沿曲线均匀分布的点的三阶贝塞尔曲线进行离散化 . 曲线由四个点p0,p1,p2,p3定义,通用点p(t)由0 <t <1给出:
point_t = (1 - t) * (1 - t) * (1 - t) * p0 + 3 * (1 - t) * (1 - t) * t * p1 + 3 * (1 - t) * t * t * p2 + t * t * t * p3;
我的第一个想法是离散t = 0,t_1,... t_n,...,1
这不起作用,因为一般来说,我们不会在离散点之间留下均匀的距离 .
总而言之,我需要的是一种算法来对参数曲线进行离散化,以便:
|| p(t_n) - p(t_n_+_1) || = d
我想到使用Casteljau algorithm递归地将贝塞尔曲线减半到所需的分辨率,但这需要大量的距离计算 .
关于如何解析这个问题的任何想法?
1 回答
您正在寻找的也被称为“弧长参数化” .
通常,如果以默认参数化的固定间隔细分贝塞尔曲线,则生成的曲线段将不具有相同的弧长 . 这是一种方法http://pomax.github.io/bezierinfo/#tracing .
不久之前,我正在玩一些代码(曲率流),要求点尽可能均匀分开 . 这是一个比较(在轴上没有适当的标记!;))使用线性插值和monotone cubic interpolation来自同一组正交样本(我使用每个曲线20个样本,每个使用24点高斯 - 图例正交评估)来重新参数化三次曲线 .
[请注意,这与使用更多节点和样本作为基本事实的算法的另一次运行进行比较 .
这是一个demo使用单调立方插值来重新构造曲线 . 函数Curve.getLength是正交函数 .