如果有图形处理库,其实比较简单,一般会有相应函数直接调用。
如果没有,其实实现原理也不是太复杂,主要就是比较繁琐而已。
其实画图过程就是对显存区域进行填充的过程,简单处理,就是在该圆的外接正方形中再进一步明确哪些点在圆内,哪些点不在圆内而已,需要注意因为圆心位置(X0Y0),所以这个外接正方形和实际显示区域还有交集,需要进一步切分判断(因为矩形和长方形交集判断处理更简单,所以建议先期进行)。此外还需注意的是圆处理涉及到小数,而实际显示区域是位图,只有整数点位,所以需要处理这方面的问题。大致的算法是
1. 由圆心位置、半径确定外接正方形和屏幕可视区域的交集[(X1Y1)(X2Y2)],其中X1=max(0X0-R)X2=min(128X0+R)Y1=max(0Y0-R)Y2=min(64Y0+R)
2. x值从X1到X2,取圆上点Y值(每次可能有2点,只有X=X0-R或者X0+R时是唯一点),与Y1和Y2分别比较,其中小的与Y1比较取大值,大的与Y2比较取小值获得 y1和y2,则(xy1)至(xy2)这条线画上颜色。这里以y值从Y1到Y2处理方法类似,只是得出的线就变成(x1y)到(x2y)而已。选取前述2种处理中的一种即可。