# draw_graphs **Repository Path**: bds123/draw_graphs ## Basic Information - **Project Name**: draw_graphs - **Description**: 这个仓库用来在屏幕上绘制一些简单的几何图形,包括圆、填充圆、直线、抗锯齿直线、圆弧、圆角矩形等。能让我们直观的感受各种复杂图形在屏幕上是如何绘制的。 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2023-11-02 - **Last Updated**: 2024-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 这个仓库用来在屏幕上绘制一些简单的几何图形,包括圆、填充圆、直线、抗锯齿直线、圆弧、圆角矩形等。这些图形背后的绘制算法至今可能都应用在各种的GUI框架中,比如绘制直线的**Bresenham**算法,绘制圆的**中点圆**算法。通过这些简单的几何图形绘制,能让我们直观的感受各种复杂图形在屏幕上是如何绘制的。 ![](https://gitee.com/bds123/draw_graphs/raw/master/images/draw.png) ## 使用指南 ### 添加绘制像素点接口 修改draw.h中的__draw_pixel()接口。所有的几何图形绘制底层均依赖这个接口。 ```c static void inline __draw_pixel(uint16_t x, uint16_t y, color_t c) { extern void LCD_Fast_DrawPoint(uint16_t x,uint16_t y,uint16_t color); LCD_Fast_DrawPoint(x, y, c); } ``` ### 绘制基本几何图像 ```c //绘制一条50像素线宽的直线(看上去像一个填充平行四边形) gui_draw_wide_line(55, 250, 80, 210, GREEN, 50); //绘制一条直线 draw_line(55, 300, 10, 242, GREEN); //绘制一个填充圆 draw_fill_circle(55+30+35, 250, 30, RED); //绘制一个圆角矩形 draw_round_rec(160, 205, 190, 205+30, 10, BLUE); //绘制一个填充的圆角矩形 draw_fill_round_rec(195, 205, 225, 205+60, 10, BLUE); //绘制一个圆 draw_circle(100, 100, 100, RED); //绘制一个圆弧,这个圆弧是一个半圆 draw_arc(170, 280, 20, 1|2|4|8, WHITE); ``` ### 绘制一个时钟 ```c //绘制表盘刻度 draw_clock_ticks(100,100,100,RED); //循环调用绘制秒针、分针、时针 while (1) { draw_clock(); } ``` ## 写在最后 之所以做这个仓库,目的在于让自己感受一下GUI的底层绘制,以帮助我更好的理解GUI。就像理查德.费曼所言: >我无法创造的,我就无法理解。 从实践中去感知一些事务想来还是很重要的。