Graphics-PA0
代码逻辑
直线
设直线斜率为
当前纵坐标为
1.
2.
3.
在计算k和
1.
2.
3.
需要注意交换后需要满足
圆
只考虑从(0,R)顺时针旋转的八分之一圆,其余可以对称得到。
定义判别式
1.
2.
第一个点的判别式为1.25-R,为了避免浮点数运算,将判别式改为e=4*d。
区域填充
使用扫描线算法
1. 将队列置空,初始点作为种子点入栈。
2. 在队列空则结束,否则进行一次出队,取出一个种子点q。
3. 填充q所在那一行的像素,确定被填充区段的左右端点,记为xl和xr。
4.
在区间[xl,xr]中检查与当前扫描线上下相邻的两条扫描线,若存在非边界、未填充的像素,则将每一区间的最右端作为种子点入队。返回第二步。
讨论与问题
未借鉴网上代码。
实现中发现segment
fault问题,与宋嘉玺讨论得知为边界条件没有注意。
在区域填充的第三步中,要注意填充区段是否超出了图像边界,在第四步中,也要注意上下扫描线是否超出图像边界。