中心椭圆算法画图C++
//中心椭圆算法画图
inline int round(const float a){return int(a+0.5);}
void ellipsePlotPoints(int xCenter,int yCenter,int x,int y)
{
setPixel(xCenter+x,yCenter+y);
setPixel(xCenter-x,yCenter+y);
setPixel(xCenter+x,yCenter-y);
setPixel(xCenter-x,yCenter-y);
}
void ellipseMidpoint(int xCenter,int yCenter,int Rx,int Ry)
{
int Rx2=Rx*Rx;
int Ry2=Ry*Ry;
int twoRx2=2*Rx2;
int twoRy2=2*Ry2;
int p;
int x=0;
int y=Ry;
int px=0;
int py=twoRx2*y;
ellipsePlotPoints(xCenter,yCenter,x,y);
//区域1
p=round(Ry2-(Rx2*Ry)+(0.25*Rx2));
while(px<py)
{
x++;
px+=twoRy2;
if(p<0) p+=Ry2+px;
else
{
y--;
py-=twoRx2;
p+=Ry2+px-py;
}
ellipsePlotPoints(xCenter,yCenter,x,y);
}
//区域2
p=round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)-Rx2*Ry2);
while(y>0)
{
y--;
py-=twoRx2;
if(p>0) p+=Rx2-py;
else
{
x++;
px+=twoRy2;
p+=Rx2-py+px;
}
ellipsePlotPoints(xCenter,yCenter,x,y);
}
}
如果您觉得这篇博文有用,请访问我的个人站:http://www.stubbornhuang.com,更多博文干货等着您。