中心橢圓演算法畫圖C++

HW140701發表於2016-11-18

中心橢圓演算法畫圖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);
	}
	
}


相關文章