Advertisement

计算机图形学全代码,计算机图形学作业参考代码

阅读量:

该程序为C语言代码,包含多个用于绘制图形的函数。核心内容包括:DDALine、MidBresenhamLine、BresenhamLine用于绘制直线,MidBresenhamCircle用于绘制圆,MidBresenhamEllipse用于绘制椭圆。主函数main调用这些函数,分别绘制了绿色、红色和蓝色的直线,以及红色的圆和蓝色的椭圆。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

代码仅供参考,至于怎么修改,你懂的....

#include

#include

#include

#include

void DDALine(int x0, int y0, int x1, int y1, int color);

void MidBresenhamLine(int x0, int y0, int x1, int y1, int color);

void BresenhamLine(int x0, int y0, int x1, int y1, int color);

void MidBresenhamCircle(int r, int color);

void MidBresenhamEllipse(int a, int b, int color);

int main()

{

DDALine(0,0,2000,3000,GREEN);

MidBresenhamLine(0,0,2000,3000,RED);

BresenhamLine(0,0,2000,300,BLUE);

MidBresenhamCircle(100,RED);

MidBresenhamEllipse(320,100,BLUE);

getch();

return 0;

}

void DDALine(int x0, int y0, int x1, int y1, int color)

{

int dx,dy,epsl,k;

float x,y,xIncre,yIncre;

dx = x1 - x0; dy = y1 - y0;

x = x0; y = y0;

if(abs(dx) > abs(dy))

epsl = abs(dx);

else

epsl = abs(dy);

xIncre = (float)dx / (float)epsl;

yIncre = (float)dy / (float)epsl;

for(k=0;k<=epsl;k++)

{

putpixel((int)(x+0.5),int(y+0.5),color);

x += xIncre;

y += yIncre;

}

}

void MidBresenhamLine(int x0, int y0, int x1, int y1, int color)

{

int dx,dy,d,UpIncre,DownIncre,x,y;

if(x0 > x1)

{

x = x1; x1 = x0; x0 = x;

y = y1; y1 = y0; y0 = y;

}

x = x0; y = y0;

dx = x1 - x0;

dy = y1 - y0;

d = dx - 2 * dy;

UpIncre = 2 * dx - 2 * dy;

DownIncre = -2 * dy;

while(x <= x1)

{

putpixel(x,y,color);

x++;

if(d<0)

{

y++;

d += UpIncre;

}

else

d += DownIncre;

}

}

void BresenhamLine(int x0, int y0, int x1, int y1, int color)

{

int x,y,dx,dy,e;

dx = x1 - x0; dy = y1 - y0;

e = -dx; x = x0; y = y0;

while(x<=x1)

{

putpixel(x,y,color);

x++;

e = e + 2 * dy;

if(e>0)

{

y++;

e = e - 2 * dy;

}

}

}

void MidBresenhamCircle(int r, int color)

{

int x,y,d;

x = 0; y = r; d = 1 - r;

while(x <= y)

{

putpixel(x,y,color);putpixel(y,x,color);

putpixel(-y,x,color);putpixel(-x,y,color);

putpixel(-x,-y,color);putpixel(-y,-x,color);

putpixel(y,-x,color);putpixel(x,-y,color);

if(d<0)

d += 2 * x + 3;

else

{

d += 2 * (x-y) + 5;

y--;

}

x++;

}

}

void MidBresenhamEllipse(int a, int b, int color)

{

int x,y;

float d1,d2;

x = 0; y = b;

d1 = b * b + a * a * (-b + 0.25);

putpixel(x,y,color);putpixel(-x,-y,color);

putpixel(-x,y,color);putpixel(x,-y,color);

while(bb(x+1) < aa(y-0.5))

{

if(d1 <= 0)

{

d1 += b * b * (2 * x +3);

x++;

}

else

{

d1 += b * b * (2 * x + 3) + a * a * (-2 * y + 2);

x++;

y--;

}

putpixel(x,y,color);putpixel(-x,-y,color);

putpixel(-x,y,color);putpixel(x,-y,color);

}

d2 = b * b * (x+0.5) * (x + 0.5) + a * a * (y - 1) * (y - 1) - aab*b;

while(y>0)

{

if(d2<=0)

{

d2 += b * b * (2x+2) + a * a * (-2y+3);

x++;

y--;

}

else

{

d2 += a * a * (-2*y+3);

y--;

}

putpixel(x,y,color);putpixel(-x,-y,color);

putpixel(-x,y,color);putpixel(x,-y,color);

}

}

全部评论 (0)

还没有任何评论哟~