本文主要是介绍图形学算法--Bresenham算法画圆(四分法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前几篇blog都是在写图形处理中直线的画法,现在开始我们进入圆的画法。首先要讲的就是圆的Bresenham四分画法。
圆的Bresenham四分画法,其基本思想和直线的Bresenham画法是一样的,由当前点推断出下一个点的位置,一个点一个点地生成。同时,由于圆的的对称性,我们只需要计算出第一象限中的14圆就行了,其他三个象限的圆能通过对称性直接得到。具体做法如下:
假设目前所要画的点全部在以圆心为原点的直角坐标系中的第一象限。
如上图所示,假设我们当前点是 ,则下一个将要画出的点就一定是H(x+1,y)V(x,y−1)D(x+1,y−1)之一,现在的任务就是要判断这三个点中要去哪一个。其逻辑关系为:
If D在圆上,则选择D为一下个点
Else if D 在圆内,则选取D、H两者间最靠近圆的点
Else if D 在园外,则选取V、D两之间最靠近圆的点
其具体过程如下:
1、构造判别式
像画直线一样,我首先需要构造一个计算点到圆上的距离的判别式:F(x,y)=x2+y2−R2(我们把圆心看做坐标原点)
若F(x,y)>0,则 在圆外
若F(x,y)<0,则 在园内
若F(x,y)=0,则 在园上
2、计算判别式
当前点为p(x,y),则我们首先需要判断的是,D点在不在圆上,计算D点到圆的距离:ΔD=F(x+1,y−1)=(x
圆的Bresenham四分画法,其基本思想和直线的Bresenham画法是一样的,由当前点推断出下一个点的位置,一个点一个点地生成。同时,由于圆的的对称性,我们只需要计算出第一象限中的14圆就行了,其他三个象限的圆能通过对称性直接得到。具体做法如下:
假设目前所要画的点全部在以圆心为原点的直角坐标系中的第一象限。
如上图所示,假设我们当前点是 ,则下一个将要画出的点就一定是H(x+1,y)V(x,y−1)D(x+1,y−1)之一,现在的任务就是要判断这三个点中要去哪一个。其逻辑关系为:
If D在圆上,则选择D为一下个点
Else if D 在圆内,则选取D、H两者间最靠近圆的点
Else if D 在园外,则选取V、D两之间最靠近圆的点
其具体过程如下:
1、构造判别式
像画直线一样,我首先需要构造一个计算点到圆上的距离的判别式:F(x,y)=x2+y2−R2(我们把圆心看做坐标原点)
若F(x,y)>0,则 在圆外
若F(x,y)<0,则 在园内
若F(x,y)=0,则 在园上
2、计算判别式
当前点为p(x,y),则我们首先需要判断的是,D点在不在圆上,计算D点到圆的距离:ΔD=F(x+1,y−1)=(x
这篇关于图形学算法--Bresenham算法画圆(四分法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!