?? 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)) ;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -