当前位置:首页 » 操作系统 » deboor算法

deboor算法

发布时间: 2023-01-07 19:23:25

A. 计算机图形学程序

/*Bezier曲线的Casteljau算法*/

float decas(degree,codff,t)
float coeff[];
float t;
int degree;
{
int r,i;
float t1;
float codffa[10];
t1=1.0-t;
for(i=0;i<=degree;i++)
coeffa[i]=coeff[i];
for(r=1;r<degree;r++)
for(i=0;i<=degree-r;i++)
{
coeffa[i]=t1*coeffa[i]+t*coeffa[i+1];
}
return (coeffa[0]);
}

/*B样条曲线—deBoor分割算法*/

float deboor(degree,coeff,knot,u,i)
float coeff[],knot[];
float u;
int degree,i;
{
int k,j;
float t1,t2;
float coeffa[30];
for(j=i-degree+1;j<=i+1;j++)
coeffa[j]=coeff[j-i+degree-1];
for(k=1;i<=degree;k++)
forj=i+1;j>=i-degree+k+1;j--)
{
t1=(knot[j+degree-k]-u)/(knot[j+degree-k]-knot[j-1]);
t2=1.0-t1;
coeffa[j]=t1*coeffa[j-1]+t2*coeffa[j];
}
return (coeffa[i+1]);
}

/*Bezier曲线的Horner算法*/

float hornbez(degree,coeff,t)
int degree;
float coff[];
float t;
{
int i,n;
float fact,t1,aux;
t1=1.0-t;fact=1.0;n=1;
aux=coeff[0]*t1;

for(i=1;i<degree;i++)
{
face=fact*t;
n=n*(degree-i+1)/i;
aux=(aux+fact*n*coeff[i])*t1;
}
aux=aux+fact*t*codff[degree];
return aux;
}

B. 求常用的图算法(C语言描述)

/*Bezier曲线的Casteljau算法*/

float decas(degree,codff,t)
float coeff[];
float t;
int degree;
{
int r,i;
float t1;
float codffa[10];
t1=1.0-t;
for(i=0;i<=degree;i++)
coeffa[i]=coeff[i];
for(r=1;r<degree;r++)
for(i=0;i<=degree-r;i++)
{
coeffa[i]=t1*coeffa[i]+t*coeffa[i+1];
}
return (coeffa[0]);
}

/*B样条曲线—deBoor分割算法*/

float deboor(degree,coeff,knot,u,i)
float coeff[],knot[];
float u;
int degree,i;
{
int k,j;
float t1,t2;
float coeffa[30];
for(j=i-degree+1;j<=i+1;j++)
coeffa[j]=coeff[j-i+degree-1];
for(k=1;i<=degree;k++)
forj=i+1;j>=i-degree+k+1;j--)
{
t1=(knot[j+degree-k]-u)/(knot[j+degree-k]-knot[j-1]);
t2=1.0-t1;
coeffa[j]=t1*coeffa[j-1]+t2*coeffa[j];
}
return (coeffa[i+1]);
}

/*Bezier曲线的Horner算法*/

float hornbez(degree,coeff,t)
int degree;
float coff[];
float t;
{
int i,n;
float fact,t1,aux;
t1=1.0-t;fact=1.0;n=1;
aux=coeff[0]*t1;

for(i=1;i<degree;i++)
{
face=fact*t;
n=n*(degree-i+1)/i;
aux=(aux+fact*n*coeff[i])*t1;
}
aux=aux+fact*t*codff[degree];
return aux;
}

C. deboor算法生成B样条小问题

degree曲线次数,coeff[]控制点序列,knot[]节点矢量,u插值点,coeffa[30]临时存储数组。

D. 求教用VC++实现B样条曲线的绘制代码

人家做过的,你下载吧:
http://download.csdn.net/detail/glxabcandy/1846082

E. 求一个用python实现的基于deboor-cox的B样条算法

  • #!/usr/sbin/env python

  • # -*- coding:utf-8 -*-

  • import math

  • # ItemCF算法

  • def ItemSimilarity(train):

  • C = dict()

  • N = dict()

  • for u,items in train.items():

  • for i in items.keys():

  • N[i] += 1

  • for j in items.keys():

  • if i == j:

  • continue

  • C[i][j] += 1

  • W = dict()

  • for i,related_items in C.items():

  • for j,cij in related_items.items():

  • W[i][j] = cij / math.sqrt( N[i] * N[j])

  • return W

  • # ItemCF-IUF算法

  • def ItemSimilarity_v2(train):

  • C = dict()

  • N = dict()

  • for u,items in train.items():

  • for i in items.keys():

  • N[i] += 1

  • for j in items.keys():

  • if i == j:

  • continue

  • C[i][j] += 1 / math.log(1+len(items)*1.0)

  • W = dict()

  • for i,related_items in C.items():

  • for j,cij in related_items.items():

  • W[i][j] = cij / math.sqrt( N[i] * N[j])

  • return W

  • def Recommend(train,user_id,W,K):

  • rank = dict()

  • ru = train[user_id]

  • for i,pi in ru.items():

  • for j,wj in sorted(W[i].items,key=itemgetter(1),reverse=True)[0:K]:

  • if j in ru:

  • continue

  • rank[j] += pi*wj

  • return rank

F. 求;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;n<pDoc->Length;n++)13{14pDC->LineTo(pDoc->m_point[n]);15pDC->MoveTo(pDoc->m_point[n]);16}17///结束1819for(floatt=pDoc->T[0];t<pDoc->T[pDoc->T_Length-1];t +=0.001)20{21inti;22chushihua();//还原m_point 和 im_point点数组使与初始化相同23for(intr=1;r<k;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;n<length;n++)57{58pDC->LineTo(interim[n]);59pDC->MoveTo(interim[n]);60}61//B样曲线画图结束62}

G. Matlab如何绘制三次B样条基函数

原文:http://hi..com/junus/item/129037fbad8b1fc4a835a2ca
均匀三次B样条与非均匀三次B样条的基函数[Matlab版]
%花了两天时间才搞明白均匀和非均匀B样条基函数的区别,并在Matlab下调试通过.
%给大家共享一下,有研究这个的可以省些时间
%************三次均匀B样条基函数************
function y=Nfun(i,t)
%参数i,
y=0;
for j=0:(3-i)
y=y+(-1)^j*nchoosek(4,j)*(t+3-i-j)^3;
end
y=y/6;
%************K次非均匀B样条基函数************
function result = Bbase(i,k,u,t)
%第i段k次B样条基,Deboor递推递归算法
%t为变量,u(i)<=t
if k==0
if u(i)<=t && t<=t<=u(i+1);
result=1;
return;
else
result=0;
return;
end
end
if u(i+k)-u(i)==0
alpha=0;
else
alpha=(t-u(i))/(u(i+k)-u(i));
end
if u(i+k+1)-u(i+1)==0
beta=0;
else
beta=(u(i+k+1)-t)/(u(i+k+1)-u(i+1));
end
result=alpha*Bbase(i,k-1,u,t)+beta*Bbase(i+1,k-1,u,t);
end
给你个计算样条基函数的程序自己用plot画就行
function L=bsp(x,k,knot)
spint=[];
p=length(knot)-k;
q=length(x);
ma=diag(ones(1,p));
for j=1:q
for i=1:p
sp=spmak(knot,ma(i,:));
spint(j,i)=fnval(sp,x(j));
end
end
L=spint;

热点内容
米家的密码锁初始密码是多少 发布:2025-05-14 01:58:51 浏览:36
存储空间和内存的区别 发布:2025-05-14 01:57:20 浏览:950
市里煤炭资源配置是什么意思 发布:2025-05-14 01:52:23 浏览:307
c删除一行数据库 发布:2025-05-14 01:50:53 浏览:74
sql辅助 发布:2025-05-14 01:50:46 浏览:324
为什么要限制上传速度 发布:2025-05-14 01:45:07 浏览:620
kindeditor上传图片绝对路径 发布:2025-05-14 01:06:27 浏览:276
广数g96编程实例 发布:2025-05-14 01:01:56 浏览:912
安卓手机如何做一个小程序 发布:2025-05-14 01:01:51 浏览:969
linux怎么访问外网 发布:2025-05-14 01:00:24 浏览:953