• Breaseman算法绘制圆形|中点算法绘制圆形_程序片段


    Breaseman算法绘制圆形|中点算法绘制圆形_程序片段

    1. Breaseman算法绘制圆形程序

      由于算法的特殊性,限制绘制第一象限部分,其他部分通过旋转绘制。

     1 void CCGProjectWorkView::bresenHam_1P4Circle(int radium, const float lineColor[])
     2 {
     3     int pointX, pointY, deltD, deltHD, deltDV, direction;
     4     pointX = 0;
     5     pointY = radium;
     6     deltD = 2*(1-radium);
     7 
     8     glColor3f(lineColor[0], lineColor[1], lineColor[2]);
     9     glBegin(GL_POINTS);
    10     while (pointY >= 0)
    11     {
    12         glVertex3f(pointX, pointY, 0);
    13         if (deltD < 0)//D点在圆内
    14         {
    15             deltHD = 2*(deltD+pointY)-1;
    16             if (deltHD <= 0)
    17                 direction = 1;// H 点距离最近
    18             else
    19                 direction = 2;// D 点距离最近
    20         }
    21         else if (deltD > 0)//D点在圆外
    22         {
    23             deltDV = 2*(deltD -pointX)-1;
    24             if(deltDV <= 0)// D点里的最贱
    25                 direction = 2;
    26             else
    27                 direction = 3;//V点距离最近
    28         }
    29         else
    30             direction = 2;//D在圆上
    31         switch(direction)
    32         {
    33         case 1:
    34             //H点位置
    35             pointX++;
    36             deltD += 2*pointX+1;
    37             break;
    38         case 2:
    39             //D点位置
    40             pointX++;
    41             pointY--;
    42             deltD += 2*(pointX-pointY+1);
    43             break;
    44         case 3:
    45             //V点位置
    46             pointY--;
    47             deltD += (-2*pointY+1);
    48             break;
    49         default :
    50             break;
    51         }
    52     }
    53     glEnd();
    54 
    55 }

    2. 中点算法绘制圆形

      由于算法的特殊性,程序限制第一象限的1/8部分。

     1 //之画出正上方位于第一象限的左边的1/8园
     2 void CCGProjectWorkView::midPoint_1P8Circle(int radium, const float lineColor[])
     3 {
     4     int pointX, pointY, r;
     5     float distJugeFactor;
     6     r = radium;
     7     int deltX, deltY;//评判因子中x与y的个分量的递推分量
     8     deltX = 3;
     9     deltY = 2 - r - r;
    10     distJugeFactor = 1 - r;
    11 
    12     pointX = 0;
    13     pointY = radium;
    14     glColor3f(lineColor[0], lineColor[1], lineColor[2]);
    15     glBegin(GL_POINTS);
    16         glVertex3f(pointX, pointY, 0);
    17         while (pointX < pointY)
    18         {
    19             if (distJugeFactor < 0)//中点位于圆内
    20             {
    21                 distJugeFactor += deltX;
    22                 deltX += 2;
    23                 pointX++;
    24             }
    25             else
    26             {
    27                 distJugeFactor += deltX + deltY;
    28                 deltX += 2;
    29                 deltY += 2;
    30                 pointX++;
    31                 pointY--;
    32             }
    33             glVertex3f(pointX, pointY, 0);
    34         }
    35     glEnd();
    36 
    37 }
  • 相关阅读:
    [Leetcode Weekly Contest]258
    [Leetcode Weekly Contest]256
    for in 和for of的区别
    JS常用库收集汇总
    vue项目中的.env环境变量配置文件
    Rust程序设计语言(5)
    《YOLOV4&5原理与源代码解析之五:SPP CSP》
    ping不同网段的脚本
    远程清空主机所有项目的日志脚本
    启动服务的脚本
  • 原文地址:https://www.cnblogs.com/icmzn/p/5046683.html
Copyright © 2020-2023  润新知