中心椭圆算法画图C++

中心椭圆算法画图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,更多博文干货等着您。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HW140701

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值