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

基于STM32的中点圆算法,画空心圆的函数

中点圆算法(Midpoint Circle Algorithm)是一种高效绘制圆的算法,它利用圆的对称性和整数运算来避免浮点计算,非常适合嵌入式系统使用。

空心圆绘制函数实现

/*** @brief  使用中点圆算法绘制空心圆* @param  x0: 圆心x坐标* @param  y0: 圆心y坐标* @param  r: 圆的半径* @retval 无*/
void DrawCircle(int16_t x0, int16_t y0, int16_t r)
{int16_t x = r;int16_t y = 0;int16_t err = 0;while (x >= y){// 利用圆的八分对称性,一次绘制8个点PutPixel(x0 + x, y0 + y);PutPixel(x0 + y, y0 + x);PutPixel(x0 - y, y0 + x);PutPixel(x0 - x, y0 + y);PutPixel(x0 - x, y0 - y);PutPixel(x0 - y, y0 - x);PutPixel(x0 + y, y0 - x);PutPixel(x0 + x, y0 - y);if (err <= 0){y += 1;err += 2*y + 1;}if (err > 0){x -= 1;err -= 2*x + 1;}}
}

算法说明
基本原理:

从圆的最右侧点(r, 0)开始绘制

每次迭代决定下一个像素是在当前像素的右侧还是右下侧

利用圆的八分对称性,一次计算并绘制8个对称点

误差项计算:

err表示中点与圆的实际位置的误差

当err <= 0时,选择右侧像素

当err > 0时,选择右下侧像素

优化特点:

仅使用整数运算,无浮点计算

避免三角函数计算

每次迭代最多绘制8个像素点

使用示例

int main(void)
{LCD_Init();  // 初始化LCD// 设置绘制颜色为红色SetColor(RED);// 在屏幕中心(160,120)绘制半径为50的圆DrawCircle(160, 120, 50);while(1);
}
int main(void)
{LCD_Init();  // 初始化LCD// 设置绘制颜色为红色SetColor(RED);// 在屏幕中心(160,120)绘制半径为50的圆DrawCircle(160, 120, 50);while(1);
}

性能优化建议
如果LCD支持批量写入,可以缓存8个点的坐标后一次性写入

对于小半径的圆,可以适当减少迭代次数

如果不需要完整圆,可以修改循环条件绘制圆弧

这个实现比基于三角函数的版本效率高得多,特别适合STM32等嵌入式平台使用。

http://www.xdnf.cn/news/2882.html

相关文章:

  • 【MongoDB篇】MongoDB的数据库操作!
  • 通义千问最新一代大语言模型Qwen3发布了
  • 前端漏洞不扫描理由
  • 各服务日志: Grok正则解析
  • 高瓴资本张磊的顶级价值投资之道
  • 通信原理第七版与第六版区别附pdf
  • Alibaba国际站商品详情AP接口概述,json数据示例返回参考
  • 分布式系统的基石:从 CAP 理论到一致性算法全解析(简化版)
  • Centos 7系统 宝塔部署Tomcat项目(保姆级教程)
  • Spring知识点梳理
  • 【算法练习】归并排序和归并分治
  • 【C++贪心】P6023 走路|普及
  • 2025.4.29总结
  • 训练神经网络的批量标准化(使用 PyTorch)
  • Ubuntu 系统上部署 Kubernetes 的完整指南
  • KUKA机器人关机时冷启动介绍
  • 得物 小程序 6宫格 分析
  • 达索Abaqus与ANSYS Mechanical有限元分析软件对比研究
  • 缓存分片哈希 vs 一致性哈希:优缺点、区别对比及适用场景(图示版)
  • deepseek海思SD3403边缘计算AI产品系统
  • 制作一款打飞机游戏30:动画系统
  • C++学习之shell高级和正则表达式
  • MySQL事务(transaction)(笔记)
  • node.js 实战——mongoDB 续一
  • MySQL中的分组和多表连接
  • 信息过载(Information Overload):太多的信息导致了信息处理能力的饱和
  • 浏览器自动化工具:Selenium 和 Playwright
  • iOS—仿tableView自定义闹钟列表
  • 多维驱动:负载均衡何以成为现代系统架构的基石
  • AI应用实战:Excel表的操作工具