`

正负算法生成圆

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

  一、正负画圆算法描述

  设要显示圆的圆心在原点(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)中的从Pi到Pi+1
  2、当F(xi,yi)>0时:取xi+1= xi,yi+1= yi-1。即向走一步,从圆外走向圆内。对应图(b)中的从Pi到Pi+1

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

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

F(xi+1,yi+1)
=F(xi+1,yi)
=(xi+1)2+yi2-R2
=(xi2+yi2-R2)+2xi+1
= F(xi,yi)+2xi+1
(2-28)

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

F(xi+1,yi+1)
=F(xi,yi-1)
=xi2+(yi-1)2-R2
=(xi2+yi2-R2)-2yi+1
= F(xi,yi)-2yi+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) 逆时针生成圆

分享到:
评论

相关推荐

    Bresenham算法生成直线

    ### Bresenham算法生成直线 #### 知识点概览 1. **Bresenham算法原理**:介绍Bresenham算法的基本思想及其在计算机图形学中的应用。 2. **实现细节**:深入分析Bresenham算法的具体实现步骤,并解释其背后的数学...

    Bresenham圆的生成算法

    《Bresenham圆的生成算法详解》 Bresenham圆的生成算法,作为计算机图形学中的一个重要算法,主要用于高效地在屏幕上绘制出近似的圆形。它的核心思想是通过不断选择离圆心最近的像素点,逐步逼近理想中的圆。这种...

    椭圆中点Bresenham算法

    在实际应用中,椭圆中点Bresenham算法广泛应用于图形用户界面、游戏开发、图像处理等领域,因为它可以快速且精确地生成椭圆形的像素表示,对于处理大量图形元素的系统来说,这种效率至关重要。此外,由于其简单和...

    图形学三种算法生成直线段

    - 循环绘制像素,每次迭代计算新的中点,根据误差项e的正负决定向哪个方向移动。 - 如果e &gt;= 0,向y方向移动一格,更新e -= 2dy。 - 否则,不移动y,向x方向移动一格,更新e += 2dx。 - 当到达终点时停止。 3. ...

    直线、圆、椭圆的生成

    圆和椭圆的生成算法更为复杂。常见的方法包括中点算法,它基于极坐标系统,通过不断更新角度和半径来绘制圆弧。此外,还有内接正多边形逼近法和等面积正多边形逼近法,它们通过不断细分逼近圆的边界。对于圆弧,有时...

    bresenham直线算法实现(MFC)

    这个算法基于错误修正的思想,它避免了浮点运算,使得在硬件资源有限的环境下也能快速地生成接近理想的直线。MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序,包括图形用户...

    二维基本图元的生成 DDA算法 中点算法

    本主题主要关注线的生成,特别是通过DDA(Digital Differential Analyzer,数字微分分析器)算法和中点算法来实现。这两种算法是早期计算机图形学中用于在屏幕上精确画线的重要方法。 **DDA算法** DDA算法是一种...

    java画圆程序 3种算法实现

    功能设置:圆的算法 圆的算法:多边形逼近、中点、公式法 要求不同的算法用不同的颜色 算法比较简单~ 功能实现绝对没有问题~ 有不明白的可以联系我~ qq:815366795

    各个方向直线生成算法演示

    在计算机图形学中,直线生成算法是至关重要的一个部分,特别是在二维和三维渲染中。本文将深入探讨"各个方向直线生成算法演示"所涵盖的知识点,包括不同角度的直线生成方法,以及如何处理小于和大于45度角的情况。 ...

    直线生成算法

    在计算机图形学领域,直线生成算法是至关重要的基础部分,特别是在使用编程语言如VB(Visual Basic)进行图形绘制时。直线生成算法允许我们通过代码在屏幕上精确地描绘出直线,这是构建更复杂的图形和图像的基础。...

    生成半月形正负样本数据

    总的来说,生成半月形正负样本数据是机器学习实践中的一个重要环节,它可以帮助我们理解并比较不同分类算法在处理复杂数据分布时的性能。这个过程不仅锻炼了编程技能,也深化了对机器学习模型的理解。

    基于C语言实现线画图元生成算法【100012533】

    该算法的关键在于根据误差累积值的正负来决定下一次应该向x轴还是y轴方向移动,并且只涉及到整数运算,避免了浮点运算的开销。 在C语言中实现这两种算法,首先需要理解C语言的基本语法,包括变量声明、控制结构(如...

    基于Python 实现直线段生成算法和圆弧生成算法【100010592】

    详情介绍:https://www.yuque.com/sxbn/ks/100010592 实现数值微分算法(DDA)、中点画线法、Bresenham画线法、暴力算法、中点画圆法、Bresenham画圆法、正负法、圆内接正多边形逼近法等。

    计算机图形学--利用Java实现正负法画圆

    正负法是一种优化的离散化算法,用于在像素化屏幕上近似地画出连续曲线,如直线和圆。 正负法画圆的基本原理是通过计算每个像素点到圆心的距离与半径的差值,判断该像素点是否应该被染色。对于一个标准的圆形,我们...

    详解easyensemble算法,解决数据正负例样本不平衡问题

    在EasyEnsemble中,首先,我们会对原始数据进行多次Bootstrap抽样,生成多个不同的训练集。由于Bootstrap抽样具有随机性,每次抽样都会导致一些正例样本被多次选中,而负例样本可能只被选中一次或未被选中。这样可以...

    Bresenham逆时针圆弧生成算法实验报告

    逆时针圆弧生成算法是计算机图形学中用于高效绘制圆或圆弧的一种方法,特别适用于MFC(Microsoft Foundation Classes)环境下的C++编程。本实验的目标是实现Bresenham算法在逆时针方向上绘制圆和圆弧,函数接口定义...

    c++实现直线生成算法

    该算法的核心是找到每个像素中心点的位置,然后根据斜率的正负判断下一个像素的走向。步骤如下: - 计算直线的中点坐标。 - 如果斜率小于1,沿x轴方向移动,否则沿y轴方向移动。 - 对于每个像素,根据当前点的...

    计算机图形学实习

    生成圆的Bresenham算法、生成圆的正负法;Bezier曲线、B样条曲线;多边形;字符。 多边形填充: 种子填充、边缘填充、扫描线填充。 图形裁剪: 多边形裁剪、Cohen-Sutherland算法、圆裁剪。 图形的几何变换: 平...

    采用JVC算法生成枝切线的干涉相位解缠方法.docx

    在本文的改进枝切线算法中,JVC算法被用来在正负残差点之间智能地放置枝切线,目的是缩短总长度,减少“孤岛”的出现,从而提高解缠率和减少高程反演的误差。 相位解缠的基本原理是恢复被折叠的相位周期分量。在...

    一种正负关联规则的快速查询扩展算法(可编辑).doc

    通过对原始查询词的快速有效扩展,算法能够生成更有针对性的新查询,提高信息检索的精度。这对于改善用户的信息检索体验,尤其是在海量信息中寻找精确匹配的结果,具有重要的实际意义。 总之,这篇论文提出的正负...

Global site tag (gtag.js) - Google Analytics