一、实验目的:
四、实验内容及结果:
(1)直线段的生成:分别根据DDA画线法、中点画线法、Bresenham画线法的基本原理,编写绘制直
void DDALine (int x1, int y1, int x2, int y2, int
{
int x;
double k, y=y1;
k = 1.0*(y2-y1)/(x2-x1);
for(x=x1;x<=x2;x++)
{
pDC->SetPixel(x, (int)(y+0.5), color);
y=y+k;
}
}
void MPLine(int x1, int y1, int x2, int y2, int co
{
int x,y,a,b,d,d1,d2;
a = y1-y2;
b = x2-x1;
y=y1;
d = 2*a+b;
//d1=x*a;
d1=2*a;
d2=2*(a+b);
pDC->SetPixel(x,y,color);
for(x=x1;x<=x2;x++)
{
if(d<0)
{y++;d+=d2;}
else
d+=d1;
pDC->SetPixel(x,y,color);
}
}
void BHLine(int x1, int y1, int x2, int y2, int co
{
int x,y,dx,dy,dk;
dx=x2-x1;
dy=y2-y1;
dk=2*dy-dx;y=y1;// 初始值
for(x=x1;x<=x2;x++)
{
pDC->SetPixel(x,y,color);
dk = dk+2*dy;
if(dk>=0)
{
y++;dk=dk-2*dx;
}
}
}
//////////////////////////////////////////////////
// TODO: add draw code for native data here
int i, j, x1=100, y1=100, x2=600, y2=200, color1=
int color2=RGB(255,182,193);// 浅粉色
int color3=RGB(65,105,225);// 宝蓝
DDALine(x1,y1,x2,y2,color1,pDC);
MPLine(x1,y1,x2,y2+150,color2,pDC);
BHLine(x1,y1,x2,y2+300,color3,pDC);
(2)圆的生成:根据中点画圆算法的基本原理,编写绘制圆的应用程序,并运行演示。
void WholeCircle(int xc,int yc,int x,int y,int col
{
pDC->SetPixel(xc+x,yc+y,color);pDC->SetPixel(xc-x
pDC->SetPixel(xc+x,yc-y,color);pDC->SetPixel(xc-x
pDC->SetPixel(xc+y,yc+x,color);pDC->SetPixel(xc-y
pDC->SetPixel(xc+y,yc-x,color);pDC->SetPixel(xc-y
}
void MidpointCircle(int xc,int yc,int r,int color,
{
int x=0,y=r,d=1-r;
WholeCircle(xc,yc,x,y,color,pDC);
while(x<=y)
{
if(d<0)
{
d+=2*x+3;
x++;
}
else
{
d+=2*(x-y)+5;
x++;
y--;
}
WholeCircle(xc,yc,x,y,color,pDC);
}
}
//////////////////////////////////////////////////
int xc=300,yc=200,r=150,color=RGB(138,43,226);//
MidpointCircle(xc,yc,r,color,pDC);
(3)椭圆的生成:根据中点画椭圆算法的基本原理,编写绘制椭圆的应用程序,并运行演示。
void WholeEllipse(int xc,int yc,int x,int y,int c
{
pDC->SetPixel(xc+x,yc+y,color);pDC->SetPixel(xc-x
pDC->SetPixel(xc+x,yc-y,color);pDC->SetPixel(xc-x
}
void MPEllipse(int xc,int yc,int a,int b,int color
{
int aa=a*a,bb=b*b;
int x=0,y=b;
int d=(int)(bb+aa*(-b+0.25)+0.5);
WholeEllipse(xc,yc,x,y,color,pDC);
{
if(d<0){d+=bb*(2*x+3);}
else{d+=bb*(2*x+3)+aa*(-2*y+2);y--;}
x++;
WholeEllipse(xc,yc,x,y,color,pDC);
}
d = (int)(bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*bb
while(y>0)
{
if(d>0){d+=aa*(-2*y+3); }
else{d+=bb*(2*x+2)+aa*(-2*y+3);x++;}
y--;
WholeEllipse(xc,yc,x,y,color,pDC);
}
}
//////////////////////////////////////////////////
int x0=500,y0=320,x1,x2,y1,a=120,b=50,color=RGB(0,
MPEllipse(x0-170,y0,a,b,color,pDC);
MPEllipse(x0+170,y0,a,b,color,pDC);
MPEllipse(x0,y0-170,b,a,color,pDC);
MPEllipse(x0,y0+170,b,a,color,pDC);
a=20;b=20;
MPEllipse(x0,y0,a,b,color,pDC);
一、实验目的:
四、实验内容及结果:
//////////////////////////////////////////////////
一、实验目的:
四、实验内容及结果:
一、实验目的:
四、实验内容及结果: