计算机图形学全代码,计算机图形学作业参考代码
该程序为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);
}
}
