正负算法生成圆

 正负法是利用平面曲线将平面划分成正负区域,对当前点产生的圆函数进行符号判别,利用负反馈调整以决定下一个点的产生来直接生成圆弧。

  一、正负画圆算法描述

  设要显示圆的圆心在原点(0,0),半径为R,初始点的坐标为(0,R),顺时针生成八分之一圆,令:F(x,y)=x2+y2-R2

  则圆的方程为:

F(x,y)=0 (2-27)

当点(x,y)在圆内时,则F(x,y)<0;
当点(x,y)在圆外时,则F(x,y)>0;
当点(x,y)在圆上时,则F(x,y)=0;

  二、正负画圆算法思想

  现以下图的AB弧为例,来说明正负画圆法(顺时针生成圆)。

 

  假设当前点为Pi(xi,yi),取下一个点Pi+1(xi+1,yi+1)的原则是:
  1、当F(xi,yi)≤0时:取xi+1= xi+1,yi+1= yi。即向走一步,从圆内走向圆外。对应图(a)中的从PiPi+1
  2、当F(xi,yi)>0时:取xi+1= xi,yi+1= yi-1。即向走一步,从圆外走向圆内。对应图(b)中的从PiPi+1

  由于向圆内或向圆外走取决于F(xi,yi)的正负,因此称为正负法。

  下面分两种情况求出F(xi,yi)的递推公式:
  (1) 当F(xi,yi)≤0时,向右走,取xi+1=xi+1,yi+1=yi,则

F(x i+1,y i+1)
= F(x i+1,y i)
=(x i+1) 2+y i 2- R 2
=(x i 2+y i 2- R 2)+2x i+1
= F(x i,y i)+2x i+1
(2-28)

  (2) 当F(xi,yi)>0时,向下走,取xi+1=xi,yi+1=yi-1,则

F(x i+1,y i+1)
= F(x i,y i-1)
=x i 2+(y i-1) 2- R 2
=(x i 2+y i 2- R 2)-2y i+1
= F(x i,y i)-2y i+1
(2-29)

  初始时,x=0,y=R,故

F(0,R)=(02+R2)-R2=0 (2-30)

  公式(2-28)、(2-29)和(2-30)就构成正负画圆算法的核心。

  给象素坐标(x,y)及F赋初始值后,进入循环画点;

  画点后,根据F的符号进行F值的递推和下一个点的获取,直到x>y为止。

  同前面介绍的一样,利用圆的八分对称性,循环一次,画八个点。

  三、正负画圆算法实现

  注意:初值不同、圆的生成方向不同时,当前点和下一个点的获取原则是不同的,见下图。

  例如,初始点(R,0),逆时针生成圆,从图(b)可知:

  若当前点Pi在圆内,则下一点Pi+1(xi,yi+1),即向走一步;
  若当前点Pi在圆外,则下一点Pi+1(xi-1,yi),即向走一步;

(a) 顺时针生成圆        (b) 逆时针生成圆

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值