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

基于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等嵌入式平台使用。

相关文章:

  • 【数据结构】图论存储结构深度解析:邻接多重表如何实现无向图O(1)删边?邻接矩阵/链表/十字链对比
  • 【Prometheus-Mongodb Exporter安装配置指南,开机自启】
  • Educational Codeforces Round 178 div2(题解ABCDE)
  • Qwen3术语解密
  • 解决调用Claude 3.7接口 403 Request not allowed问题
  • Linux 内核中 TCP 协议的支撑解析
  • 通信协议:数字世界的隐形语言——从基础认知到工程实践-优雅草卓伊凡
  • C++每日训练 Day 18:构建响应式表单与数据验证(初学者友好)
  • [USACO08DEC] Hay For Sale S Java
  • WPF(Windows Presentation Foundation)的内容模型
  • Go 语言中的 `os.Truncate` 函数详解
  • STM32单片机入门学习——第49节: [15-2] 读写内部FLASH读取芯片ID
  • 本地大模型编程实战(29)查询图数据库NEO4J(2)
  • Mysql中索引的知识
  • 洛谷P12238 [蓝桥杯 2023 国 Java A] 单词分类
  • 基于LVS+Keepalived+NFS的高可用负载均衡集群部署
  • 基于大模型的大肠息肉全程管理研究报告
  • 破茧成蝶:一家传统制造企业的年轻化转型之路
  • 总结小程序的坑
  • ​钓鱼网页散播银狐木马,远控后门威胁终端安全
  • 锦江酒店:第一季度营业收入约29.42亿元,境内酒店出租率同比增长
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • 特朗普声称中方领导人打了电话,外交部:近期中美元首没有通话
  • 广东一公司违规开展学科培训被罚没470万,已注销营业执照
  • 野猪穿过江苏电视台楼前广场,被抓捕后送往红山森林动物园