计算机图形编程语言,c语言计算机图形编程的程序求各种实例(并说明一下啊)谢谢谢!!...

本文介绍了三种图形绘制算法:DDA直线绘制、Bresenham线和Bresenham圆,展示了如何使用这些算法在C++中实现简单的几何图形。从基础的点到线再到圆,深入浅出地探讨了计算机图形学的基本原理。
摘要由CSDN通过智能技术生成

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);

}

与图形相关的还有很多很多,扫描线填充法,种子填充法 等等

想要真正了解的话 推荐一本书!《计算机图形学》

以上程序只能说明引用方法,毕竟很对关于以上程序的东西 都在自己做的头文件里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值