计算机图形学(2)基本图形的生成和显示——圆的生成

简单画圆法

算法原理:利用圆的参数方程,直接计算离散点值。

θi+1=θi+Δθ θ i + 1 = θ i + Δ θ

xi+1=xi+rcosθi x i + 1 = ‖ x i + r cos ⁡ θ i ‖

yi+1=yi+rsinθi y i + 1 = ‖ y i + r sin ⁡ θ i ‖

八分画圆原则

圆有四条对称轴 x=0,y=0,x=y,x=y x = 0 , y = 0 , x = y , x = − y 可以将一个圆分成八分,我们可以只扫描转换其中一份,其余七份可以坐标规律得到。

中点画圆法

类似于中点画线法,同一个套路。即是构造判别式,通过代入判别式的正负,取点,更新判别式。
圆的方程 F(x,y)=x2+y2R2 F ( x , y ) = x 2 + y 2 − R 2 ,如果 F(P)=0 F ( P ) = 0 那么点P在圆上,如果 F(P)>0 F ( P ) > 0 那么P点在圆外,如果 F(P)<0 F ( P ) < 0 那么P点在圆内。

x0=0,y0=R,d0=1R x 0 = 0 , y 0 = R , d 0 = 1 − R
if(di<0)     di+1=di+2xi+3       xi+1=xi+1 i f ( d i < 0 )           d i + 1 = d i + 2 x i + 3               x i + 1 = x i + 1 (y没有更新)
if(di>=0)    di+1=di+2(xiyi)+5     xi+1xi+1,yi+1=yi1 i f ( d i >= 0 )         d i + 1 = d i + 2 ( x i − y i ) + 5           x i + 1 − x i + 1 , y i + 1 = y i − 1 (y更新了!!)

Bresenham画圆法

计算机图形学(2)基本图形的生成和显示——圆的生成_第1张图片
原理很简单:就是看d1和d2那个大,如果d1大,说明圆与竖直网格线交点离下端像素点比较近,如果d2大,说明圆与竖直网格线交点离上端像素点比较近。

d0=32R d 0 = 3 − 2 R
if(di<0)     xi+1=xi+1,yi+1=yi,di+1=di+4xi+6 i f ( d i < 0 )           x i + 1 = x i + 1 , y i + 1 = y i , d i + 1 = d i + 4 x i + 6
if(di>=0)     xi+1=xi+1,yi+1=yi1,di+1=di+4(xiyi)+10 i f ( d i >= 0 )           x i + 1 = x i + 1 , y i + 1 = y i − 1 , d i + 1 = d i + 4 ( x i − y i ) + 10

中点画椭圆法

其实跟中点画线、中点画圆的思想一毛一样,都是将中点代入方程,判断正负。
只不过椭圆只有两条对称轴,这时我们的讨论范围不再是圆的[ π/4 π / 4 , π/2 π / 2 ],而是整个第一象限,而且还有一个问题,我们是以哪个轴作为跨步,我们从斜率为-1处将第一象限椭圆分成两部分,上半部分以 xi+1=xi+1 x i + 1 = x i + 1 为跨步,下半部分以 yi+1=yi+1 y i + 1 = y i + 1 为跨步。

你可能感兴趣的:(计算机图形学(2)基本图形的生成和显示——圆的生成)