Skip to content

Conversation

@Ccccwd
Copy link

@Ccccwd Ccccwd commented Dec 15, 2025

变更范围描述
本PR为 Adafruit_GFX 图形库新增了三个几何图形绘制方法,扩展了库的图形绘制能力:

修改的文件
Adafruit_GFX.h- 添加了三个公共方法声明
Adafruit_GFX.cpp - 添加了三个方法的完整实现
新增方法
drawHexagon(int16_t x0, int16_t y0, int16_t r, uint16_t color)

绘制正六边形的轮廓
计算6个均匀分布的顶点(相邻间隔60°)
通过连接相邻顶点形成六边形边框
fillHexagon(int16_t x0, int16_t y0, int16_t r, uint16_t color)

绘制填充的正六边形
使用三角形扇形填充策略,从中心点向外填充6个三角形
充分利用现有的 fillTriangle() 高效扫描线算法
drawPentagram(int16_t x0, int16_t y0, int16_t radius, uint16_t color)

绘制五角星的轮廓
采用双层顶点设计:5个外层顶点(星尖)+ 5个内层顶点
外层顶点间隔72°,内层半径为外层的0.382倍(黄金比例)
通过交替连接形成经典五角星形状
fillPentagram(int16_t x0, int16_t y0, int16_t radius, uint16_t color)

绘制填充的五角星
继承 drawPentagram 的顶点计算方式
通过填充10个三角形(5对)实现高效填充
设计一致性
API规范:所有新增方法遵循库现有的命名和参数模式,与 drawCircle/fillCircle 和 drawTriangle/fillTriangle 风格一致
数据类型:坐标使用 int16_t,颜色使用 uint16_t,与库标准保持统一
基础函数复用:充分利用现有的 drawLine() 和 fillTriangle() 方法,最小化代码冗余
已知限制
精度限制:顶点坐标通过三角函数计算并转换为整数,小数部分会被截断,造成 < 1 像素的偏差,不影响视觉效果
半径范围:应保持在 int16_t 有效范围内(-32768 到 32767)
旋转功能:当前实现没有包含旋转参数,所有图形都是固定朝向(六边形顶部朝上,五角星顶部朝上)
平台兼容性:所有方法均为与平台无关的通用实现

@BillyDonahue
Copy link
Contributor

Hey, please check the README.md file.

Please no more pentagram-drawing PRs. Any oddly-specific drawing functions can go in your own code and aren't helpful in a library context.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants