随圆的填充算法-----走阶梯法

本文介绍了椭圆填充算法的一种实现方式——走阶梯法。算法从起点(x0, y0)开始,沿着阶梯向左行走,直到(xn, yn),然后使用对称算法获取右边边界点。关键在于计算下部阶梯时,如何正确地向右移动返回椭圆内部,避免丢点。通过控制阶梯高度nstep,找到椭圆边界点,并用这些点进行填充。代码中展示了具体的实现细节。" 2478265,303654,电驴eMule源代码解析:协议与网络通信细节,"['P2P网络', '协议分析', 'C++编程', '网络编程', '电驴协议']
摘要由CSDN通过智能技术生成

椭圆填充算法(走阶梯法)

 

算法说明:.如图所示,路线是沿绿色虚线走,从(x0,y0)点开始走阶梯,先向左走,碰到弧线记住该点后,接着往下走然后继续向左走,阶梯的高度为step ,每走完一个阶梯就会找到一个边界点。Step越小,记住的边界点会越多。走到(xn,yn)点后完成走阶梯任务,也就得到了椭圆的左边的边界点,然后用对称算法,获取右边的边界点。一但边界点计算完成,填充就很容易实现了。



 

算法分析:碰到弧线的条件是 x^2/a^2 + y^2/b^2 = 1,走阶梯算法优点是不会全区域扫描,只会走很小的区域很短的路径,因此速度很快。本算法的关键是走到下半部份时,如何往右走多少路程?其实下部绿色虚线不并不是真的路径。之所以这样图示,是为了对本算法的理解。为沿用上部份处理代码,在碰到下部分第一个圆弧上的点时先往下走出椭圆,然后从椭圆的外部移回到椭圆内部,然后往左走,移回的距离准确性很关键,否则移不到圆内,这种情况下,就会出现丢点。移回的距离的计算方法是当前点的x坐标到Y轴的距离的一半,快接近下部顶时,索性直接移回到Y轴上。

 

代码如下:


//define the origin point offset, rect为椭圆的外边框。

              int noffsetX = rect.left +rect.Width()/2;

              int noffsetY = rect.top +rect.Height()/2;

        

              //transform to standard ellipse;

              //为了使椭圆的标准方程,有必要把圆心转换成到(0,0)位置

              CRect rtEsc(rect);

              rtEsc.OffsetRect(-rect.left, -rect.top);

              rtEsc.OffsetRect(-rect.Width()/2,-rect.Height

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值