当前位置: 首页 > news >正文

lcd画圆

//******************************************************************
//函数名:  _draw_circle_8
//功能:    8对称性画圆算法(内部调用)
//输入参数:(xc,yc) :圆中心坐标
//             (x,y):光标相对于圆心的坐标
//             c:填充的颜色
//返回值:  无
//修改记录:无
//******************************************************************  
static void _draw_circle_8(int xc, int yc, int x, int y, u16 c)
{
    LCD_DrawPoint(xc + x, yc + y, c);
    LCD_DrawPoint(xc - x, yc + y, c);
    LCD_DrawPoint(xc + x, yc - y, c);
    LCD_DrawPoint(xc - x, yc - y, c);
    LCD_DrawPoint(xc + y, yc + x, c);
    LCD_DrawPoint(xc - y, yc + x, c);
    LCD_DrawPoint(xc + y, yc - x, c);
    LCD_DrawPoint(xc - y, yc - x, c);
}

//******************************************************************
//函数名:  gui_circle
//功能:    在指定位置画一个指定大小的圆(填充)
//输入参数:(xc,yc) :圆中心坐标
//             c:填充的颜色
//             r:圆半径
//             fill:填充判断标志,1-填充,0-不填充
//返回值:  无
//修改记录:无
//******************************************************************  
void LCD_DrawCircle(int xc, int yc,u16 c,int r, int fill)
{
    int x = 0, y = r, yi, d;
    d = 3 - 2 * r;
    if (fill) 
    {
        // 如果填充(画实心圆)
        while (x <= y) {
            for (yi = x; yi <= y; yi++)
                _draw_circle_8(xc, yc, x, yi, c);

            if (d < 0) {
                d = d + 4 * x + 6;
            } else {
                d = d + 4 * (x - y) + 10;
                y--;
            }
            x++;
        }
    }else 
    {
        // 如果不填充(画空心圆)
        while (x <= y) {
            _draw_circle_8(xc, yc, x, y, c);
            if (d < 0) {
                d = d + 4 * x + 6;
            } else {
                d = d + 4 * (x - y) + 10;
                y--;
            }
            x++;
        }
    }
}

void LCD_DrawCircleSlow(int xc, int yc,u16 color,int r, int fill)
{
    #if  0//0
//    int x = 0, y = r, yi, d;
//    d = 3 - 2 * r;    
//        while (x <= y) {
//            _draw_circle_8(xc, yc, x, y, color);
//            if (d < 0) {
//                d = d + 4 * x + 6;
//            } else {
//                d = d + 4 * (x - y) + 10;
//                y--;
//            }
//            x++;
//            delay_ms(50);
//        }
    
        int x=0,y=r;
            while (x <= y) {
                if(x*x+y*y<r*r)x++;//圆内
                else y--;//圆外
                LCD_DrawPoint(xc+x,yc+y,color);
                LCD_DrawPoint(xc-x,yc+y,color);
                LCD_DrawPoint(xc-y,yc+x,color);
                LCD_DrawPoint(xc-y,yc-x,color);
                LCD_DrawPoint(xc+y,yc+x,color);
                LCD_DrawPoint(xc+y,yc-x,color);
                LCD_DrawPoint(xc+x,yc-y,color);
                LCD_DrawPoint(xc-x,yc-y,color);
            delay_ms(50);
        }
#else
//    #define lcd_draw_point LCD_DrawPoint
//     uint16_t i,y;
//      if((xc < r) || (yc < r))            //保证能画出完整的圆
//           return;
//         
//      for(i = xc-r; i <= xc; i++){
//           y = sqrt(pow(r,2)-pow((xc-i),2)); //求出在垂直坐标上的偏移
//           //画左上半圆
//           lcd_draw_point(i,yc-y,color);
//           //画左下半圆
//           lcd_draw_point(i,yc+y,color);
//           //画右上半圆
//           lcd_draw_point(xc*2-i,yc-y,color);
//           //画右下半圆
//           lcd_draw_point(xc*2-i,yc+y,color);
//          
//          delay_ms(50);
//      }
    int systick =  get_tick(); 
        int x=0,y=0;
        for(int i=-90;i<270;i+=2)// for(float i=0;i<360;i+=2)//顺时针
//        for(int i=270;i>-90;i-=2)//逆时针
        {
            #define  PI   3.1415926
            x=(int)(r*cos(PI*i/180));//+0.5;//2pi~360
            y=(int)(r*sin(PI*i/180));//+0.5;
            LCD_DrawPoint(40+x, 40+y,color);//20ms
            //LCD_DrawCircle(xc+x, yc+y,color,3-2,1);//1~59ms;2~122ms
//            LCD_ShowString(0,120, int2str(x*1000 ,4) ,WHITE,BLACK,16,0);
//            delay_ms(10);
        }
#endif
         int take_time =  get_tick()-systick; 
        LCD_ShowString(0,120, int2str(take_time ,4) ,WHITE,BLACK,16,0);delay_ms(1000);//59//122Ms
}
typedef struct
{
  int16_t hCos;
  int16_t hSin;
} Trig_Components;uint16_t const SINE_tabel[180/2]={0,
572,1144,1715,2286,2856,3425,3993,4560,
5126,5690,6252,6813,7371,7927,8481,9032,
9580,10126,10668,11207,11743,12275,12803,13328,
13848,14365,14876,15384,15886,16384,16877,17364,
17847,18324,18795,19261,19720,20174,20622,21063,
21498,21926,22348,22763,23170,23571,23965,24351,
24730,25102,25466,25822,26170,26510,26842,27166,
27482,27789,28088,28378,28660,28932,29197,29452,
29698,29935,30163,30382,30592,30792,30983,31164,
31336,31499,31651,31795,31928,32052,32166,32270,
32365,32449,32524,32588,32643,32688,32723,32748,
32763,
//    32768,32763,32748,32723,32688,32643,32588,
//32524,32449,32365,32270,32166,32052,31928,31795,
//31651,31499,31336,31164,30983,30792,30592,30382,
//30163,29935,29698,29452,29197,28932,28660,28378,
//28088,27789,27482,27166,26842,26510,26170,25822,
//25466,25102,24730,24351,23965,23170,22763,22348,
//21926,21498,21063,20174,19720,19261,18795,18324,
//17847,17364,16384,15886,15384,14876,14365,13848 ,
//13328 ,12803 ,12275 ,11743 ,11207 ,10668 ,10126 ,9580 ,
//9032 ,8481 ,7927 ,7371 ,6813 ,6252 ,5690 ,5126 ,
//4560 ,3993 ,3425 ,2856 ,2286 ,1715 ,1144 ,572 ,0 ,
};
extern Trig_Components MCM_Trig_Functions( int16_t hAngle );
void LCD_DrawCircleTable(int xc, int yc,u16 color,int r, int fill)
{
    Trig_Components sincos;
    int x=0,y=0;
    int systick =  get_tick(); 
//    #define  PI   3.1415926
    #define PI   3.1415926535898
        for(int i=0;i<360;i+=1)//+1 6ms;+2 3ms;
//    for(int i=-90;i<270;i+=2)// //顺时针
//        for(int i=270;i>-90;i-=2)//逆时针
        {
            //sincos=MCM_Trig_Functions(PI*i/180);
            if(i<90)//
            {
                 x=r*SINE_tabel[(90-i)%90]/32768;//r*sincos.hCos;//(int)(r*cos(PI*i/180));//+0.5;//2pi~360
                 y=r*SINE_tabel[(i)%90]/32768;(int)(r*sin(PI*i/180));//+0.5;
            }
            else if(i<180)
            {
                x=r*( -SINE_tabel[(i-90)%90])/32768;//r*sincos.hCos;//(int)(r*cos(PI*i/180));//+0.5;//2pi~360
                y=r*SINE_tabel[(180-i)%90]/32768;(int)(r*sin(PI*i/180));//+0.5;
            }
            else if(i<270)
            {
                x=r*( -SINE_tabel[(270-i)%90])/32768;//r*sincos.hCos;//(int)(r*cos(PI*i/180));//+0.5;//2pi~360
                y=r*( -SINE_tabel[(i-180)%90])/32768;(int)(r*sin(PI*i/180));//+0.5;
            }
            else  
            {
                x=r*SINE_tabel[(i-270)%90]/32768;//r*sincos.hCos;//(int)(r*cos(PI*i/180));//+0.5;//2pi~360
                y=r*( -SINE_tabel[(360-i)%90])/32768;(int)(r*sin(PI*i/180));//+0.5;
            }
            //LCD_DrawPoint(40+x, 40+y,color);//6ms
            LCD_DrawCircle(xc+x, yc+y,color,3-2,1);//1~42ms;2~105ms
            //LCD_ShowString(0,120, int2str(x*1000 ,4) ,WHITE,BLACK,16,0);
            //delay_ms(10);
        }
        int take_time =  get_tick()-systick; 
        LCD_ShowString(0,120, int2str(take_time ,4) ,WHITE,BLACK,16,0);delay_ms(1000);//42//105MS
}

相关文章:

lcd画圆

//****************************************************************** //函数名&#xff1a; _draw_circle_8 //功能&#xff1a; 8对称性画圆算法(内部调用) //输入参数&#xff1a;(xc,yc) :圆中心坐标 // (x,y):光标相对于圆心的坐标 // c:填…...

React组件详解

React组件分为两大类 1.函数组件 2.类组件&#xff08;最常用&#xff09; 组件化 import ReactDom from "react-dom";// // 1.通过函数创建一个组件 // 2.函数名字必须大写开头 // 3.函数必须有返回值 function Func1() {return <h2>这是一个基础组件</h…...

C++面试:内存溢出、内存泄漏的原因与解决

目录 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 解决内存溢出问题的方法 内存泄漏&#xff08;Memory Leak&#xff09; 内存泄露基础 解决内存泄漏问题的方法 内存溢出&#xff08;Memory Overflow&#xff09; 内存溢出介绍 内存溢出是指程序在执…...

【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊二分查找,包括基础二分,寻找目标值的左右边界,搜索旋转数组以及波峰,以及x的平方根问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空…...

kaldi 详细安装教程、PyTorch-Kaldi、TIMIT下载、Librispeech下载

kaldi 详细安装教程 本kaldi 安装教程 转载于该链接kaldi 详细安装教程 安装系统依赖&#xff08;如果经常使用linux 服务器&#xff0c;一般都会有&#xff09; apt-get updateapt-get install -y --no-install-recommends g make automake autoconf bzip2 unzip wget sox …...

EtherCAT 转 ModbusTCP 网关

功能概述 本产品是 EtherCAT 和 Modbus TCP 网关&#xff0c;使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站&#xff0c;接 TwinCAT 、CodeSYS 、PLC 等&#xff1b;在 ModbusTCP 侧做为 ModbusTCP 主站&#xff08;Client&#xff09;或从站&#xff08;Se…...

iMazing2024Windows和Mac的iOS设备管理软件(可以替代iTunes进行数据备份和管理)

iMazing2024是一款兼容 Windows 和 Mac 的 iOS 设备管理软件&#xff0c;可以替代 iTunes 进行数据备份和管理。以下是一些 iMazing 的主要功能和优点&#xff1a; 数据备份和恢复&#xff1a;iMazing 提供了强大的数据备份和恢复功能&#xff0c;可以备份 iOS 设备上的各种数据…...

carpower

车载android 电源管理 车载音响电源管理器_definitely的技术博客_51CTO博客...

数据结构2月25日

第一道&#xff1a; 第二道&#xff1a; 1、插入到prev和next中间 1.new(struct list_head*)malloc(sizeof(struct list_head*)); if(newNULL) { printf("失败\n"); return; } new->nextprev->next; prev->nextnew; return; 2、删除prve和next…...

改进 RAG:自查询检索

原文地址&#xff1a;Improving RAG: Self Querying Retrieval 2024 年 2 月 11 日 让我们来解决构建 RAG 系统时的一个大问题。 我们不能依赖语义搜索来完成每个检索任务。只有当我们追求单词的含义和意图时&#xff0c;语义搜索才有意义。 But in case&#xff0c;我们正…...

【Git企业实战开发】Git常用开发流操作总结

【Git企业实战开发】Git常用开发流操作总结 大家好 我是寸铁&#x1f44a; 总结了一篇Git常用开发流操作总结的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 现在刚做项目的伙伴&#xff0c;可能你之前学过git&#xff0c;但是一实战发现不熟悉 没关系&#xff0c;看寸铁这篇…...

vue2+element医院安全(不良)事件报告管理系统源代码

目录 安全不良事件类型 源码技术栈 医院安全&#xff08;不良&#xff09;事件报告管理系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为主要对象&#xff0c;可以自动、及时、实际地反应医院的安全、不良、近失事件…...

leetcode初级算法(python)- 字符串

文章目录 1.反转字符串常规算法pythonic 算法2.整数反转数学法字符串法3.字符串中的第一个唯一字符pythonic算法哈希算法4.有效的字母异位词常规算法进阶算法5.最长公共前缀1.反转字符串 输入:[‘h’,‘e’,‘l’,‘l’,‘o’] 输出:[‘o’,‘l’,‘l’,‘e’,‘h’]...

Python 鼠标模拟

鼠标模拟即&#xff1a;通过python 进行模拟鼠标操作 引入类库 示例如下&#xff1a; import win32api import win32con import time 设置鼠标位置 设置鼠标位置为窗口中的回收站。 示例如下&#xff1a; # 设置鼠标的位置 win32api.SetCursorPos([30, 40]) 双击图标 设置…...

Linux进程 ----- 信号处理

前言 从信号产生到信号保存&#xff0c;中间经历了很多&#xff0c;当操作系统准备对信号进行处理时&#xff0c;还需要判断时机是否 “合适”&#xff0c;在绝大多数情况下&#xff0c;只有在 “合适” 的时机才能处理信号&#xff0c;即调用信号的执行动作。 一、信号的处理…...

【数位】【数论】【分类讨论】2999. 统计强大整数的数目

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 数位 数论 LeetCode2999. 统计强大整数的数目 给你三个整数 start &#xff0c;finish 和 limit 。同时给你一个下标从 0 开始的字符串 s &#xff0c;表示一个 正 整数。 如果一个 正 整数 x 末尾部分是 s &#xff08…...

MongoDB聚合运算符:$atan2

$atan2用来计算反正切&#xff0c;返回指定表达式的反正切值&#xff0c;与$antan的区别主要是参数不同。 语法 { $atan2: [<expression1>, <expression1>] }<expression>为可被解析为数值的表达式$atan2返回弧度&#xff0c;使用$radiansToDegrees运算符可…...

敏捷开发最佳实践:价值维度实践案例之ABTest中台化

22年敏捷白皮书调研发现&#xff0c;仅有14%的企业部分实现价值管理闭环&#xff0c;8%的企业能够做到企业战略和业务目标与价值管理紧密结合。这一现象说明了大部分中国企业还不能在敏捷实践中实现需求价值的体系化及多维度价值度量&#xff0c;因此推广优秀的敏捷实践至关重要…...

爬虫基本库的使用(requests库的详细解析)

注&#xff1a;本文一共4万多字&#xff0c;希望读者能耐心读完&#xff01;&#xff01;&#xff01; 前面,我们了解了urllib库的基本用法&#xff08;爬虫基本库的使用(urllib库的详细解析)-CSDN博客&#xff09;。其中&#xff0c;确实又不方便的地方。例如处理网页验证…...

QT实现串口通信

一.Qt串口通信 Qt提供了两个关于串口通信的C类&#xff0c;分别是QSerialPort和QSerialPortInfo。 QSerialPort类提供了操作串口的各种接口。 QSerialPortInfo是一个辅助类&#xff0c;可以提供计算机中可用的串口的各种信息。 QSerialPortInfo Class用于提供外部串行端口的…...

微信小程序 --- 通用模块封装(showToast,showModal ,本地存储)

目录 01. 为什么进行模块封装 02. 消息提示模块封装 03. 模态对话框封装 04. 封装本地存储 API 05. 拓展:封装异步存储API优化代码 01. 为什么进行模块封装 在进行项目开发的时候&#xff0c;我们经常的会频繁的使用到一些 API&#xff0c; 例如&#xff1a;wx.showToast…...

基于springboot+vue的音乐网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

pclpy 最小二乘法拟合平面

pclpy 最小二乘法拟合平面 一、算法原理二、代码三、结果1.左边原点云、右边最小二乘法拟合平面后点云投影 四、相关数据 一、算法原理 平面方程的一般表达式为&#xff1a; A x B y C z D 0 ( C ≠ 0 ) Ax By Cz D 0 \quad (C\neq0) AxByCzD0(C0) 即&#xff1a; …...

蓝桥杯备战刷题(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…...

Python习题详解

练习&#xff1a; 1&#xff0c;计算100以内奇数的和 #计算100以内所有奇数的和 sum 0 # n 1 # while n < 100: # # sum sum n # sum n # # n n 2 # n 2 # print(sum) n 99 #求偶数时n 100 while n > 0:sum n# n n - 2n - 2 print(sum)2&#xff0c;打印直…...

绩效考核利器:Excel报表模板,解锁企业高效员工评价新境界

一、背景与目标 在现今的企业管理中&#xff0c;绩效考核是一项至关重要的任务。它旨在评估员工的工作表现&#xff0c;激励员工积极进取&#xff0c;同时也是制定薪酬、晋升、培训等决策的重要依据。为了满足这一需求&#xff0c;我们设计了一款绩效考核Excel报表模板&#x…...

如何使用Lychee+cpolar搭建本地私人图床并实现远程访问存储图片

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…...

跨境支付介绍

1、跨境电商定义和分类&#xff1b; 2、国际贸易清结算&#xff1b; 3、跨境支付&#xff1b; 1、跨境电商定义和分类 跨境电商业务简单说就是指不同国家地域的主体通过电子商务进行交易的一种业务模式。同传统的电商不同&#xff0c;交易双方属于不同的国家。因此&#xff0…...

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…...

Cortex-M可以跑Linux操作系统吗?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; Cortex-M系列微控制器主要设计…...

红色 网站/苏州seo网站公司

1、下行物理信道 下行物理信道一般处理流程&#xff1a; 这个过程与TD-SCDMA是不同的。在物理层传输的信号都是OFDM符号&#xff0c;从传输信道映射到物理信道的数据&#xff0c;经过一系列的底层的处理&#xff0c;最后把数据送到天线端口上&#xff0c;进行空口的传输。 1、加…...

建设银行的网站是什么情况/如何在百度推广自己

1. 中间件 中间件也称为“前置”(pre)和“后置”(post)钩子&#xff0c;是在执行异步功能期间传递控制的函数。中间件在模式(Schema)级别指定&#xff0c;对编写插件很有用。Mongoose中有4种类型的中间件&#xff1a;文档(document)中间件&#xff0c;模型(model)中间件&#…...

广州淘宝网站建设/seo01

1. 魔法方法是什么&#xff1f; 魔法方法(Magic Method)是Python比较独特的应用&#xff0c;它可以给你的类增加特殊的方法&#xff0c;如果你的对象实现了&#xff08;重载&#xff09;&#xff0c;这些方法中的某一个&#xff0c;就会被Python所调用。正如装饰器类似&#xf…...

微信怎么做网站推广/腾讯控股第三季度营收1401亿

题目&#xff1a;设m(x)是一个一致的3/4正确的蒙特卡罗算法&#xff0c;考虑下面的算法&#xff1a; public static int m3(int x) {int a,b,c;am(x);bm(x);cm(x);if((ab)||(ac))return a;return c;} &#xff08;1&#xff09;试证明算法m3(x)是一致的27/32正确的算法。&#…...

网站设置5个关键词/百家号查询排名数据查询

系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo …...

内蒙古城乡建设和住房建设厅网站/网络营销个人感悟小结

创业&#xff0c;这是个苟活在不甘寂寞的技术人心中的词汇。一日&#xff0c;小白不甘苟活&#xff0c;喝了些白酒&#xff0c;抽了半盒烟&#xff0c;把所有的感觉有价值的思路拿捏到一起&#xff0c;想了一个响亮的名字迷迷糊糊的注册了域名。这&#xff0c;就是小白建站的开…...