微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于画圆的算法

关于画圆的算法

时间:10-02 整理:3721RD 点击:
在tft上画圆。用的是Bresenham算法。可是画出的圆失真严重,请问要怎么才能画出比较圆的圆?
Bresenham算法代码如下
void CirclePoint(uint16 x,uint16 y,uint16 x0,uint16 y0,uint16 color)
{
     PutPixel(x,y,color);
     PutPixel(y,x,color);
     PutPixel(x,2*y0-y,color);
     PutPixel(y,2*y0-x,color);
     PutPixel(2*x0-y,2*y0-x,color);
     PutPixel(2*x0-x,2*y0-y,color);
     PutPixel(2*x0-x,y,color);
     PutPixel(2*x0-y,x,color);
}
void MidBresenhamcircle(uint16 x0,uint16 y0,uint16 R)
{
     int16 x,y;
     int16 d;
     x=x0;
     y=y0+R;      
     d=3-2*R;/* 计算初始值 */
     while(x<(x0+R/1.4))
     {   
        CirclePoint(x,y,x0,y0,2);  /*绘制点(x,y)及其在八分圆中的另外7个对称点*/
        if(d<0)  
            d+=4*x+6;   
                   /*根据误差项d的判断,决定非最大位移方向上是走还是不走*/
        else
        {
           d+=4*(x-y)+10;
           y--;
        }
        x++;
    }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top