计算机图形学1
基本图形生成算法
1、实验目的和要求
通过编写源程序、运行程序以及调试程序,能更深入的理解计算机图形学基本原理,以及图形造型、图形处理原理等,为实际应用能力的提高打下坚实的基础。
通过本次实验,掌握光栅图形的显示原理,理解基本图元的绘制原理。
掌握算法:
直线DDA算法
直线Bresenham算法
中点画线法
圆的Bresenham算法
椭圆的扫描转换
2、实验内容
绘制直线基本算法
a. 直线DDA算法
b.中点Bresenham算法
c. Bresenham画线法
d.圆的中点Bresenham算法
e.椭圆的扫描转换
a.直线DDA算法
#include
#include
void DDALine(int x0,int y0,int x1,int y1,int color)
{
float dx, dy, y, k,x;
dx=x1-x0; dy=y1-y0;
k=dy/dx; y=y0; x=x0;
if(abs(k)<=1)
{
for (x=x0; x<=x1; x++)
{
putpixel (x, (int)(y+0.5), color);
y=y+k;
}
}
else
{
for(y=y0;y<=y1;y++)
{
putpixel((int)(x+0.5),y,color);
x=x+1/k;
}
}
}
void main()
{
int x0=0,y0=0,x1=60,y1=10;int color=2;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"C:\\TURBOC2");
DDALine(x0,y0,x1,y1,color);
getch();
closegraph();
}
b.中点Bresenham算法
#include
#include
ZD_Line (int x0,int y0,int x1, int y1,int color)
{
int b,a,d1,d2,d,x,y;
a=y0-y1;b=x1-x0;
d=2*a+b;d1=2*a,d2=2*(a+b);
x=x0, y=y0;
putpixel (x, y, color);