b样条基函数C语言代码 b样条基函数导数

如何用C#制作画B样条曲线的程序如果人家不支持b样条基函数C语言代码,就自己写代码b样条基函数C语言代码了b样条基函数C语言代码,
好像不过是个3次函数而已,如果有这种需求,自己找本图形学的书来看看了
怎么用B样条拟合离散的数据点之后,得到相应的函数公式?请高手解答?。?多谢使用p次B样条对数据点进行插值或拟合,得到的函数的形式一般可以记为y=F(x)=\sum_{i=1}^n{N_{i,p}(x)c_i} , 其中n由自己给定 。系数c_i的值由你使用的插值或者拟合的方法来确定 。
由于B样条基函数N_{i,p}(x)是关于x的非线性函数 , 所以F(x)是关于x的非线性函数 , 对于给定的x,代入上式即可得到y,但是对于给定的y,需要求解y=F(x)这个非线性方程才能得到x 。
求解这个非线性方程的计算复杂度由样条次数p决定,从理论上讲,p次多项式的零点最多有p个,因此上述非线性方程的解最多有p个 。
求解这个非线性方程的算法可以参考数值分析中列出的非线性方程解法,需要具体问题具体分析 , 没有一种能找出所有解的简便又万能的方法 。
参考资料:《数值分析》(第3版),北京航空航天大学出版社出版 。
求;B-样条曲线的deboor算法和C++程序voidCGraph151View::seekPoint(intk)//表示k阶2{3CPoint *interim;//存储B样数组指针4CDC *pDC =GetDC();5CGraph151Doc *pDoc = GetDocument();//6intj = pDoc-Length-1;7intlength=1.0/0.001;//B样曲线的点的个数8interim =newCPoint[length];//保存B样曲线点9intindex_length=0;//记录interim数组下一个下标10//画控制点图11pDC-MoveTo(pDoc-m_point[0]);12for(intn=0;npDoc-Length;n++)13{14pDC-LineTo(pDoc-m_point[n]);15pDC-MoveTo(pDoc-m_point[n]);16}17///结束1819for(floatt=pDoc-T[0];tpDoc-T[pDoc-T_Length-1];t +=0.001)20{21inti;22chushihua();//还原m_point 和 im_point点数组使与初始化相同23for(intr=1;rk;r++)24{25guodian();//更新一下m_point点数组 的数据26for( i=r;i=j;i++)27{28floatpara1;29floatpara2;3031if( (pDoc-T[i+k-r] - pDoc-T[i]) !=0.0)32{33para1 = (t - pDoc-T[i]) / (pDoc-T[i+k-r] - pDoc-T[i]);34para2 = (pDoc-T[i+k-r] - t) /(pDoc-T[i+k-r] - pDoc-T[i]);35}36else37{38para1=0.0;39para2=0.0;40}4142intx =int( (para1 * pDoc-m_point[i].x) + (para2 * pDoc-m_point[i-1].x) );43inty =int( (para1 * pDoc-m_point[i].y) + (para2 * pDoc-m_point[i-1].y) );44pDoc-im_point[i].SetPoint(x,y);45}4647}4849interim[index_length++].SetPoint( pDoc-im_point[3].x,pDoc-im_point[3].y);//存储计算出的点50}5152//画图 B样曲线53CPen pen(PS_SOLID,1,RGB(255,0,0));54pDC-SelectObject(pen);55pDC-MoveTo(interim[0]);56for(intn=0;nlength;n++)57{58pDC-LineTo(interim[n]);59pDC-MoveTo(interim[n]);60}61//B样曲线画图结束62}
关于均匀三次b样条插值的C++程序 求助帖#include
#include
#include
void main()
{
float a[37],b[37];
cout" ""度数"" ""sin(x)值"" ""阶导值"" ""二阶导值"endl;
for(int i=0;i37;i++)
coutsetw(11)setprecision(3)
10*i
setw(11)setprecision(3)
sin(i*31.4/180)
setw(11)setprecision(3)
cos(i*31.4/180)
setw(11)setprecision(3)
-sin(i*31.4/180)
endl;
cout"周期内积值b样条基函数C语言代码:0"endl;
}
用C语言实现一个基于B样条的算法不可能给你编出“机器手”程序 。
这是绘图“机器手”控制程序介绍 。
墨水浓度3种,笔的控制:平面坐标,角度,压力 , 起终点,轨迹,洗笔,甩笔,沾墨 。
竹的基本参数:节,干,叶 , 枝先由画家的图,分解获得 。曲线用离散点控制 。每4点为一个B样条,非控制点坐标在4点之间,用4点B样条函数计算,t是参数(曲线参数方程的位置参数,例如在30%的地方,t=0%到100%,或用每4点的q[i],q[i+1]计算) 。
B样条上的每个点都是可以算出来的么 -- B样条 是内插函数,已知控制点,插非控制点,笔按此走 。

推荐阅读