//递归实现Bspline函数的基函数 //t:参数值 //k:基函数的起始节点编号 //m:基函数的阶数 //nodes:节点矢量 float CFreeform_CurveView::BKM(float t, int k, int m, float nodes[]) { float value; //存储基函数的值 if(m == 1) //递归结束条件:阶数为1 { if (t >= nodes[k] && t < nodes[k + 1]) //参数值在节点区间内 value = 1; else { value = 0; //参数值不在节点区间内 }

}
else if (m > 1) //递归过程
{	
	//使用递归公式计算基函数的值
	value = (Divide((t - nodes[k]), (nodes[k + m - 1] - nodes[k])) * BKM(t, k, m - 1, nodes) + 
		Divide((nodes[k + m] - t), (nodes[k + m] - nodes[k + 1])) * BKM(t, k + 1, m - 1, nodes));
}
return value;

}

功能:输入代码实现Bspline函数的基函数提示:1 参考P231页的BSpline曲线的基函数 2 采用递归的方法实现	 3 调用 float Divide float l_Operand float r_Operand实现除法	 Divide函数处理了除数为0的情况参数解释: tkm----参考BSpline函数的定义	 nodes----节点矢量t0 t1

原文地址: https://www.cveoy.top/t/topic/bM3t 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录