1》
dda法画直线的例子:
void cmyview::onddaline()
{
cdc* pdc=getdc();//获得设备指针
int xa=100, ya=300, xb=300, yb=200,c=rgb(0,255,0);//定义直线的两端点,直线颜色
int x,y;
float dx, dy, k;
dx=(float)(xb-xa), dy=(float)(yb-ya);
k=dy/dx, y=ya;
if(abs(k)<1)
{
for (x=xa;x<=xb;x++)
{pdc->setpixel (x,int(y+0.5),c);
y=y+k;}
}
if(abs(k)>=1)
{
for (y=ya;y<=yb;y++)
{pdc->setpixel (int(x+0.5),y,c);
x=x+1/k;}
}
releasedc(pdc);
}
void cmyview::onbresenhamline()
{
cdc* pdc=getdc();
int x,y,i,e,dx,dy,t;
int x1=100,y1=200,x2=350,y2=100,c=rgb(0,0,255);
dx=abs(x2-x1),dy=abs(y2-y1),e=2*dy-dx;
x=x1,y=y2;
if(dx>dy)
{
for(i=0;i<=dx;i++)
{
pdc->setpixel(x,y,c);
x++;
if(e>=0)
{y++;
e=e+2*dy-2*dx;}else e=e+dy;
}
}
else
{
t=dx;
dx=dy;
dy=t;
for(i=0;i<=dx;i++)
{
pdc->setpixel(x,y,c);
x++;
if(e>=0)
{y++;
e=e+2*dy-2*dx;}else e=e+dy;
}
}
}
2》中心画圆法 做园
void cmyview::onmidpointcircle()
{
cdc* pdc=getdc();
int xc=100,int yc=200,float r=50,float alpha=1;
int i;
float sinalpha,cosalpha,xi,yi,xii,yii,steps;
sinalpha=sin(pi*alpha);
cosalpha=cos(pi*alpha);
xi=xc+r;
yi=yc;
steps=360;
for(i=0;i
{
xii=xc+(xi-xc)*cosalpha-(yi-yc)*sinalpha;//确定第一点xii,yii.其与圆心的连线和 xi,yi与圆心的连线夹角45°
yii=yc+(xi-xc)*sinalpha+(yi-yc)*cosalpha;
pdc->moveto(xi,yi);
pdc->lineto(xii,yii);
xi=xii;
yi=yii;
}
}
3》 bresenham法画圆
void cmyview::onbresenhamcircle()
{
// todo: add your command handler code here
cdc* pdc=getdc();
int xc=300, yc=300, r=40, c=rgb(0,0,255);
int x,y,p;
x=0,y=r,p=3-2*r;
while(x
{
pdc->setpixel(xc+x, yc+y, c);
pdc->setpixel(xc-x, yc+y, c);
pdc->setpixel(xc+x, yc-y, c);
pdc->setpixel(xc-x, yc-y, c);
pdc->setpixel(xc+y, yc+x, c);
pdc->setpixel(xc-y, yc+x, c);
pdc->setpixel(xc+y, yc-x, c);
pdc->setpixel(xc-y, yc-x, c);
if (p<0)
p=p+4*x+6;
else
{
p=p+4*(x-y)+10;
y-=1;
}
x+=1;
}
if(x==y)
pdc->setpixel(xc+x, yc+y, c);
pdc->setpixel(xc-x, yc+y, c);
pdc->setpixel(xc+x, yc-y, c);
pdc->setpixel(xc-x, yc-y, c);
pdc->setpixel(xc+y, yc+x, c);
pdc->setpixel(xc-y, yc+x, c);
pdc->setpixel(xc+y, yc-x, c);
pdc->setpixel(xc-y, yc-x, c);
releasedc(pdc);
}
与图形相关的还有很多很多,扫描线填充法,种子填充法 等等
想要真正了解的话 推荐一本书!《计算机图形学》
以上程序只能说明引用方法,毕竟很对关于以上程序的东西 都在自己做的头文件里。