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画圆
//****************************************************************** //函数名: _draw_circle_8 //功能: 8对称性画圆算法(内部调用) //输入参数:(xc,yc) :圆中心坐标 // (x,y):光标相对于圆心的坐标 // c:填…...
React组件详解
React组件分为两大类 1.函数组件 2.类组件(最常用) 组件化 import ReactDom from "react-dom";// // 1.通过函数创建一个组件 // 2.函数名字必须大写开头 // 3.函数必须有返回值 function Func1() {return <h2>这是一个基础组件</h…...
C++面试:内存溢出、内存泄漏的原因与解决
目录 内存溢出(Memory Overflow) 内存溢出介绍 解决内存溢出问题的方法 内存泄漏(Memory Leak) 内存泄露基础 解决内存泄漏问题的方法 内存溢出(Memory Overflow) 内存溢出介绍 内存溢出是指程序在执…...
【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找
一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊二分查找,包括基础二分,寻找目标值的左右边界,搜索旋转数组以及波峰,以及x的平方根问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空…...
kaldi 详细安装教程、PyTorch-Kaldi、TIMIT下载、Librispeech下载
kaldi 详细安装教程 本kaldi 安装教程 转载于该链接kaldi 详细安装教程 安装系统依赖(如果经常使用linux 服务器,一般都会有) apt-get updateapt-get install -y --no-install-recommends g make automake autoconf bzip2 unzip wget sox …...
EtherCAT 转 ModbusTCP 网关
功能概述 本产品是 EtherCAT 和 Modbus TCP 网关,使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站,接 TwinCAT 、CodeSYS 、PLC 等;在 ModbusTCP 侧做为 ModbusTCP 主站(Client)或从站(Se…...
iMazing2024Windows和Mac的iOS设备管理软件(可以替代iTunes进行数据备份和管理)
iMazing2024是一款兼容 Windows 和 Mac 的 iOS 设备管理软件,可以替代 iTunes 进行数据备份和管理。以下是一些 iMazing 的主要功能和优点: 数据备份和恢复:iMazing 提供了强大的数据备份和恢复功能,可以备份 iOS 设备上的各种数据…...
carpower
车载android 电源管理 车载音响电源管理器_definitely的技术博客_51CTO博客...
数据结构2月25日
第一道: 第二道: 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:自查询检索
原文地址:Improving RAG: Self Querying Retrieval 2024 年 2 月 11 日 让我们来解决构建 RAG 系统时的一个大问题。 我们不能依赖语义搜索来完成每个检索任务。只有当我们追求单词的含义和意图时,语义搜索才有意义。 But in case,我们正…...
【Git企业实战开发】Git常用开发流操作总结
【Git企业实战开发】Git常用开发流操作总结 大家好 我是寸铁👊 总结了一篇Git常用开发流操作总结的文章✨ 喜欢的小伙伴可以点点关注 💝 现在刚做项目的伙伴,可能你之前学过git,但是一实战发现不熟悉 没关系,看寸铁这篇…...
vue2+element医院安全(不良)事件报告管理系统源代码
目录 安全不良事件类型 源码技术栈 医院安全(不良)事件报告管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件…...
leetcode初级算法(python)- 字符串
文章目录 1.反转字符串常规算法pythonic 算法2.整数反转数学法字符串法3.字符串中的第一个唯一字符pythonic算法哈希算法4.有效的字母异位词常规算法进阶算法5.最长公共前缀1.反转字符串 输入:[‘h’,‘e’,‘l’,‘l’,‘o’] 输出:[‘o’,‘l’,‘l’,‘e’,‘h’]...
Python 鼠标模拟
鼠标模拟即:通过python 进行模拟鼠标操作 引入类库 示例如下: import win32api import win32con import time 设置鼠标位置 设置鼠标位置为窗口中的回收站。 示例如下: # 设置鼠标的位置 win32api.SetCursorPos([30, 40]) 双击图标 设置…...
Linux进程 ----- 信号处理
前言 从信号产生到信号保存,中间经历了很多,当操作系统准备对信号进行处理时,还需要判断时机是否 “合适”,在绝大多数情况下,只有在 “合适” 的时机才能处理信号,即调用信号的执行动作。 一、信号的处理…...
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
作者推荐 动态规划的时间复杂度优化 本文涉及知识点 数位 数论 LeetCode2999. 统计强大整数的数目 给你三个整数 start ,finish 和 limit 。同时给你一个下标从 0 开始的字符串 s ,表示一个 正 整数。 如果一个 正 整数 x 末尾部分是 s (…...
MongoDB聚合运算符:$atan2
$atan2用来计算反正切,返回指定表达式的反正切值,与$antan的区别主要是参数不同。 语法 { $atan2: [<expression1>, <expression1>] }<expression>为可被解析为数值的表达式$atan2返回弧度,使用$radiansToDegrees运算符可…...
敏捷开发最佳实践:价值维度实践案例之ABTest中台化
22年敏捷白皮书调研发现,仅有14%的企业部分实现价值管理闭环,8%的企业能够做到企业战略和业务目标与价值管理紧密结合。这一现象说明了大部分中国企业还不能在敏捷实践中实现需求价值的体系化及多维度价值度量,因此推广优秀的敏捷实践至关重要…...
爬虫基本库的使用(requests库的详细解析)
注:本文一共4万多字,希望读者能耐心读完!!! 前面,我们了解了urllib库的基本用法(爬虫基本库的使用(urllib库的详细解析)-CSDN博客)。其中,确实又不方便的地方。例如处理网页验证…...
QT实现串口通信
一.Qt串口通信 Qt提供了两个关于串口通信的C类,分别是QSerialPort和QSerialPortInfo。 QSerialPort类提供了操作串口的各种接口。 QSerialPortInfo是一个辅助类,可以提供计算机中可用的串口的各种信息。 QSerialPortInfo Class用于提供外部串行端口的…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
