求;B-样条曲线的deboor算法和C++程序

求;B-样条曲线的deboor算法和C++程序,第1张

voidCGraph151View::seekPoint(intk)//表示k阶2{3CPoint *interim/此拆/存储B样数组指针4CDC *pDC =GetDC()5CGraph151Doc *pDoc = GetDocument()//6intj = pDoc->Length-17intlength=1.0/0.001//B样曲线的点的个数8interim =newCPoint[length]//保存B样曲线点9intindex_length=0//记录interim数组下一个下标10//画控制点图11pDC->MoveTo(pDoc->m_point[0])12for(intn=0n<pDoc->Lengthn++)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{21inti22chushihua()//还原m_point 和 im_point点数组使搭扒友与知槐初始化相同23for(intr=1r<kr++)24{25guodian()//更新一下m_point点数组 的数据26for( i=ri<=ji++)27{28floatpara129floatpara23031if( (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.039para2=0.040}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=0n<lengthn++)57{58pDC->LineTo(interim[n])59pDC->MoveTo(interim[n])60}61//B样曲线画图结束62}

{ // Bezier曲线

TPoint p0,p1,p2,p3,p11,p22,pp0,pp1,pp2,pt11,pt22

int i

for(i = 0i <cpfx-1i++)

{

pt11 = pPfx[i]

pt22 = pPfx[i+1]

pp0 = pts[ptn-1]

pp1 = pt11

pp2.x = (pt11.x + pt22.x)/2

pp2.y = (pt11.y + pt22.y)/2

p0 = pp0

p1.x = pp0.x/3 + 2 * pp1.x/3

p1.y = pp0.y/3 + 2 * pp1.y/3

p2.x = 2 * pp1.x/3 + pp2.x/3

p2.y = 2 * pp1.y/3 + pp2.y/3

p3 = pp2

//register float t

for(float t = 0.0ft <= 1.0ft += 0.5f)

{

float x = (1-t)*(1-t)*(1-t)*p0.x+

3*t*(1-t)*(1-t)*p1.x+ 3*t*t

*(1-t)*p2.x + t*t*t*p3.x

float y = (1-t)*(1-t)*(1-t)*p0.y

+ 3*t*(1-t)*(1-t)*p1.y+3

*t*t*(1-t)*p2.y + t*t*t*p3.y

pts[ptn].x = x

pts[ptn].y = y

ptn++

}

}

根据具体的卜庆使用橡羡环境调整,这是TTF字梁弊拍库显示用的。

不可能给你编出“机器手”程序。

这是绘图“机器手”控制程序介绍。

墨水备雀浓度3种,笔的控制:平面坐标,角度,压力,起终点,轨迹,洗笔,甩笔,沾墨。

竹的基本参数:节,干,叶,枝先由画家的图,分解获得。曲线用离散点控制。每4点为一个B样条,非控制点坐标在4点之间,用4点B样条函数计算,t是参数(曲线参数方程的位置参数,例如在30%的地方,t=0%到100%,或用每4点的q[i],q[i+1]计算)。

B样条上的每个点都是可以算出来的么 -- B样条 是内插函数,已知控制点,插非控制点,笔按此走。

B样条内插戚滚源程序很容易写。但并不解决你的控制机器人(手)画竹子的问题。你提供的文高态章作者是两个中国人,用英文写的,很容易读。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8234358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存