- 积分
- 350
- 明经币
- 个
- 注册时间
- 2003-12-24
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2003-12-29 17:17:00
|
显示全部楼层
我这有个用VC写的读ASCII文件,绘二次样条曲线的程序,看你需要吗?
void CTttView::OnDraw(CDC* pDC)
{
if(flag==1)
{
pDC->SetMapMode (MM_LOMETRIC);
pDC->SetWindowOrg (-150,1700);
pDC->MoveTo (0,0);
pDC->LineTo (0,1500);
pDC->LineTo (-35,1455);
pDC->MoveTo (0,1500);
pDC->LineTo (35,1455);
pDC->MoveTo (0,0);
pDC->LineTo (2000,0);//DRAW X AXIS
pDC->LineTo (1955,35);
pDC->MoveTo (2000,0);
pDC->LineTo (1955,-35);//DRAW X AXIS
pDC->TextOut (-50,1450,"Y");
pDC->TextOut (-50,-50,"(0,0)");
pDC->TextOut (2000,-50,"X");
pDC->Ellipse (x[0]-10,y[0]-10,x[0]+10,y[0]+10);
for(int i=1;i<10;i++)
{
pDC->Ellipse (x-10,y-10,x+10,y+10);
}
CSe pse;
double step=10;
double sx=x[0]-step;
double sy=pse.calstart (x[0],y[0],x[1],y[1],step);
double ex=x[9]+step;
double ey=pse.calend (x[8],y[8],x[9],y[9],step);
CCal pcal;
double tstep;
double tx[11],ty[11];
i=0;
for(tstep=0.0;tstep<=1.0;tstep=tstep+0.1)
{
pcal.input (sx,sy,x[0],y[0],x[1],y[1],x[2],y[2],tstep);
tx=pcal.calpx ();
ty=pcal.calpy ();
i++;
}
pDC->MoveTo (x[0],y[0]);
for(i=1;i<=10;i++)
{
if((tx-floor(tx))>=0.5)
{
tx=ceil(tx);
}
else
{
tx=floor(tx);
}
if((ty-floor(ty))>=0.5)
{
ty=ceil(ty);
}
else
{
ty=floor(ty);
}
pDC->LineTo ((int)(tx),(int)(ty));
}
for(int j=1;j<=7;j++)
{
i=0;
for(tstep=0.0;tstep<1.0;tstep=tstep+0.1)
{
pcal.input (x[j-1],y[j-1],x[j],y[j],x[j+1],y[j+1],x[j+2],y[j+2],tstep);
tx=pcal.calpx ();
ty=pcal.calpy ();
i++;
}
pDC->MoveTo (x[j],y[j]);
for(i=1;i<=10;i++)
{
if((tx-floor(tx))>=0.5)
{
tx=ceil(tx);
}
else
{
tx=floor(tx);
}
if((ty-floor(ty))>=0.5)
{
ty=ceil(ty);
}
else
{
ty=floor(ty);
}
pDC->LineTo ((int)(tx),(int)(ty));
}
}
i=0;
for(tstep=0.0;tstep<1.0;tstep=tstep+0.1)
{
pcal.input (x[7],y[7],x[8],y[8],x[9],y[9],ex,ey,tstep);
tx=pcal.calpx ();
ty=pcal.calpy ();
i++;
}
pDC->MoveTo (x[8],y[8]);
for(i=1;i<=10;i++)
{
if((tx-floor(tx))>=0.5)
{
tx=ceil(tx);
}
else
{
tx=floor(tx);
}
if((ty-floor(ty))>=0.5)
{
ty=ceil(ty);
}
else
{
ty=floor(ty);
}
pDC->LineTo ((int)(tx),(int)(ty));
}
}
}
///////////////////////////
void CTttView::OnFileOpen()
{
CFileDialog input(TRUE);
CString filename;
FILE *fp;
float dx[10],dy[10];
if(input.DoModal ()!= IDOK)
return;
filename=input.GetPathName ();
if((fp=fopen(filename,"r++"))==NULL)
{
MessageBox("Failed");
return;
}
for(int i=0;i<=9;i++)
{
fscanf(fp,"%f,%f;",&dx,&dy);
}
//////////////////////////////////////////////////////////////////////////////
for(i=0;i<10;i++)
{
if((dx-floor(dx))>=0.5)
{
x=(int)(150*dx+1);
}
else
{
x=(int)(150*dx-1);
}
if((dy-floor(dy))>=0.5)
{
y=(int)(10*dy+1);
}
else
{
y=(int)(10*dy-1);
}
}
flag=1;
Invalidate(TRUE);
} |
|