|
// 绘制圆环段的函数
void drawCircleSegment(uint16_t x0, uint16_t y0, uint16_t r, uint16_t thickness, uint8_t startSegment, uint8_t endSegment, uint16_t color)
{
// x0, y0: 圆心坐标
// r: 圆的半径
// thickness: 圆环的粗细
// startSegment: 开始段的编号(0-100)
// endSegment: 结束段的编号(0-100)
// color: 圆环颜色
float angleStep = 360.0 / 100; // 每段的角度
if (startSegment < endSegment) // 正向
{
for (uint8_t i = startSegment; i < endSegment; i++)
{
float startAngle = i * angleStep - 90.0;
float endAngle = (i + 1) * angleStep - 90.0;
// 转换为弧度制
float startRad = startAngle * M_PI / 180.0;
float endRad = endAngle * M_PI / 180.0;
for (int t = 0; t < thickness; t++)
{
for (float theta = startRad; theta < endRad; theta += 0.01)
{
int x = x0 + (r - t) * cos(theta);
int y = y0 + (r - t) * sin(theta);
if (x >= 0 && x < 160 && y >= 0 && y < 80)
{
ST7735_DrawPixel(x, y, color);
}
}
}
}
}
else // 反向
{
for (uint8_t i = startSegment; i > endSegment; i--)
{
float startAngle = (i - 1) * angleStep - 90.0;
float endAngle = i * angleStep - 90.0;
// 转换为弧度制
float startRad = startAngle * M_PI / 180.0;
float endRad = endAngle * M_PI / 180.0;
for (int t = 0; t < thickness; t++)
{
for (float theta = startRad; theta < endRad; theta += 0.01)
{
int x = x0 + (r - t) * cos(theta);
int y = y0 + (r - t) * sin(theta);
if (x >= 0 && x < 160 && y >= 0 && y < 80)
{
ST7735_DrawPixel(x, y, color);
}
}
}
}
}
}
GPT生成了一段代码,功能可以实现,就是画的不圆,特别在4个方向位置,有段直线效果 |
|