欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 基于STM32的中点圆算法,画空心圆的函数

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

2025/11/24 23:02:57 来源:https://blog.csdn.net/weixin_50882165/article/details/147617240  浏览:    关键词:基于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等嵌入式平台使用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词