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样条内插戚滚源程序很容易写。但并不解决你的控制机器人(手)画竹子的问题。你提供的文高态章作者是两个中国人,用英文写的,很容易读。
评论列表(0条)