zoukankan      html  css  js  c++  java
  • LCD通过绘点的方式画一个圆

     1 /***********************************************************************************************************************   
     2 **    function name:   void lcd_draw_point(uint16_t x0,uint16_t y0,uint16_t color)
     3 **    description:     以特定颜色绘制一个点
     4 **    input para:         x0,y0表示坐标,color表示颜色
     5 **                      
     6 **    return:                无                            
     7 ***********************************************************************************************************************/
     8 void lcd_draw_point(uint16_t x0,uint16_t y0,uint16_t color)
     9 {
    10     //绘点函数,不同IC不同,根据驱动定义
    11     //.............
    12     //.............
    13 }
    14 
    15 /***********************************************************************************************************************   
    16 **    function name:   void draw_circle(uint16_t x0,uint16_t y0,uint8_t r,uint16_t color) 
    17 **    description:     以特定颜色绘一个圆
    18 **    input para:         x0,y0表示中心坐标,r表示半径,color圆的颜色
    19 **                      
    20 **    return:                无                            
    21 ***********************************************************************************************************************/
    22 void draw_circle(uint16_t x0,uint16_t y0,uint8_t r,uint16_t color) //圆心(x0,y0),半径r
    23 {
    24     uint16_t i,y;
    25     if((x0 < r) || (y0 < r))            //保证能画出完整的圆
    26         return;
    27        
    28     for(i = x0-r; i <= x0; i++){
    29         y = sqrt(pow(r,2)-pow((x0-i),2)); //求出在垂直坐标上的偏移
    30         //画左上半圆
    31         lcd_draw_point(i,y0-y,color);
    32         //画左下半圆
    33         lcd_draw_point(i,y0+y,color);
    34         //画右上半圆
    35         lcd_draw_point(x0*2-i,y0-y,color);
    36         //画右下半圆
    37         lcd_draw_point(x0*2-i,y0+y,color);
    38     }
    39 }

    代码直接如上,大概思路就是以横向直径为参考,每个像素绘一个点。因为计算会存在小数,所以半径越小效果越差。

  • 相关阅读:
    entityframework学习笔记--002-database first
    ServletContext总结
    form 表单提交类型
    对称加密与非对称加密
    跨域详解
    https工作原理
    Entity Framework数据库初始化四种策略
    Modbus 协议解析
    CAFFE(FAQ.2):Ubuntu 配置caffe 框架之数据库读取,错误解决:ImportError: No module named leveldb解决办法
    CAFFE(0):Ubuntu 下安装anaconda2和anaconda3
  • 原文地址:https://www.cnblogs.com/zwj412/p/11836621.html
Copyright © 2011-2022 走看看