背景
给定一些列有序的2D/3D数据点,我们想要用一条 p p p次B样条拟合它们。使用逼近技术而不是插值,因为数据点偏多,利用误差界,可以很好的控制样条曲线的控制点数量。
开发
基于matlab平台,开发了p次B样条曲线的逼近算法。本算法基于误差/容差范围,适用于2D、3D有序数据点,并且适用于开曲线和闭曲线**。
功能演示+样例代码
function [P, U, E] = b_spline_approx(Q, p, alpha, TOL, keep_ends, is_closed)
% INPUT
% Q - data points, Q = [Q(0), ..., Q(m)]
% p - the degree of spline
% alpha - parametrization strategy
% TOL - tolerance
% keep_ends - whether or not keep end-points, i.e., C(t_0) = Q(0), C(t_m) = Q(m)
% is_closed, whether or not generate a closed B-spline curve
%
% OUTPUT
% P - control points
% U - knot vector
% E - error vector
if ~check_data_points(Q)
error('Bad data points!')
end
[P, U, E] = b_spline_approx_impl(Q, p, alpha, TOL, keep_ends, is_closed);
end
演示视频
基于MALAB的B样条曲线逼近算法(抗噪声、支持开/闭合、误差控制)
关键词
B样条曲线、逼近、噪声、容差、闭合曲线