📄 b样条.txt
字号:
//二次B样条曲线
void CMyFrame::DrawBSpline2(CPaintDC *dc)
{
int i;
double j,t,k,p,q,p0,p1,p2,q0,q1,q2;
k=1/float(ptNum);
for(i=0;i<ptNum-2;i++)
{
p0=(pt[i].x+pt[i+1].x)/2.0;
p1=pt[i+1].x-pt[i].x;
p2=(pt[i].x-2*pt[i+1].x+pt[i+2].x)/2.0;
q0=(pt[i].y+pt[i+1].y)/2.0;
q1=pt[i+1].y-pt[i].y;
q2=(pt[i].y-2*pt[i+1].y+pt[i+2].y)/2.0;
for(j=0;j<ptNum;j++)
{
t=j*k;
p=p0+p1*t+p2*t*t;
q=q0+q1*t+q2*t*t;
if(t>0)
dc->LineTo(int(p),int(q)) ;
dc->MoveTo(int(p),int(q)) ;
}
}
}
/* 画3次B样条曲线 */
void CMyFrame::DrawBSpline3(CPaintDC *dc)
{
int i;
double j,t,k,p,q,p0,p1,p2,p3,q0,q1,q2,q3;
k=1/float(ptNum);
for(i=0;i<ptNum-3;i++)
{
p0=(pt[i].x+4*pt[i+1].x+pt[i+2].x)/6.0;
p1=(-3*pt[i].x+3*pt[i+2].x)/6.0;
p2=(3*pt[i].x-6*pt[i+1].x+3*pt[i+2].x)/6.0;
p3=-(pt[i].x-3*pt[i+1].x+3*pt[i+2].x-pt[i+3].x)/6.0;
q0=(pt[i].y+4*pt[i+1].y+pt[i+2].y)/6.0;
q1=(-3*pt[i].y+3*pt[i+2].y)/6.0;
q2=(3*pt[i].y-6*pt[i+1].y+3*pt[i+2].y)/6.0;
q3=-(pt[i].y-3*pt[i+1].y+3*pt[i+2].y-pt[i+3].y)/6.0;
for(j=0;j<ptNum;j++)
{
t=j*k;
p=p0+p1*t+p2*t*t+p3*t*t*t;
q=q0+q1*t+q2*t*t+q3*t*t*t;
if(t>0)
dc->LineTo(int(p),int(q)) ;
dc->MoveTo(int(p),int(q)) ;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -