画圆分为六大类控制台字符圆、EasyX、标准控制台进阶画法、计算机图形学算法实现、第三方跨平台图形库、操作系统原生 API。方法 1控制台字符画圆利用圆方程x2y2r2判断坐标用星号输出圆形#include iostream #include cmath using namespace std; int main() { // 圆半径 int r 10; // 遍历纵坐标 for (int y -r; y r; y) { // 遍历横坐标 for (int x -r; x r; x) { // 判断点是否在圆上 if (abs(x * x y * y - r * r) r) { cout *; } else { cout ; } } cout endl; } return 0; }原理圆标准方程x2y2r2当坐标满足近似等式时打印*否则打印空格拼接成圆形。方法 2EasyX 图形库绘制实心圆仅适用于 VSEasyX 图形库能输出彩色实心 / 空心圆#include graphics.h int main() { // 创建窗口宽600高400 initgraph(600, 400); // 空心圆圆心(300,200)半径100 circle(300, 200, 100); // 实心红色圆 setfillcolor(RED); fillcircle(150, 200, 80); _getch(); // 暂停窗口 closegraph(); return 0; }第一段代码任意 C 编译器Dev-C、VS、g均可直接运行第二段图形代码需要安装EasyX仅 Windows 平台可用修改变量r可以调整控制台圆的大小。方法3中点圆算法Midpoint Circle控制台注纯标准 C无依赖之前只用了简单圆方程近似还有更顺滑的字符圆算法图形学标准光栅化算法画出来的圆边缘更均匀无锯齿#include iostream #include cmath using namespace std; // 中点圆算法输出字符圆 void drawCircle(int r) { int x 0, y r; int d 1 - r; int cx r, cy r; // 圆心偏移 char screen[40][40] {0}; // 八分对称填充八个对称点 auto plot [](int x, int y) { screen[cyy][cxx] *; screen[cyy][cx-x] *; screen[cy-y][cxx] *; screen[cy-y][cx-x] *; screen[cyx][cxy] *; screen[cyx][cx-y] *; screen[cy-x][cxy] *; screen[cy-x][cx-y] *; }; while (x y) { plot(x, y); if (d 0) d 2 * x 3; else { d 2 * (x - y) 5; y--; } x; } // 打印画布 for (int i 0; i 2*r1; i) { for (int j 0; j 2*r1; j) cout (screen[i][j] ? * : ); cout endl; } } int main() { drawCircle(12); return 0; }方法4极坐标三角函数控制台圆利用xr*cosθyr*sinθ逐点绘制#include iostream #include cmath using namespace std; int main() { int r 10; for (double theta 0; theta 2 * M_PI; theta 0.08) { int x round(r * cos(theta)); int y round(r * sin(theta)); // 定位打印 cout \033[ r - y ; r x H*; } cout endl; return 0; }注ANSI 控制台光标控制Linux/macOS 终端可用Windows cmd 不支持。方法5跨平台第三方图形库1. SFML#include SFML/Graphics.hpp int main() { sf::RenderWindow window(sf::VideoMode(400, 400), Circle); sf::CircleShape circle(100); // 半径100 circle.setFillColor(sf::Color::Blue); circle.setPosition(100, 100); while (window.isOpen()) { sf::Event e; while (window.pollEvent(e)) if (e.type sf::Event::Closed) window.close(); window.clear(); window.draw(circle); window.display(); } return 0; }2. SDL2配合 SDL_RenderDrawCircle 扩展函数绘制圆形适合 2D 游戏。3. Qt大型 GUI 框架.用于桌面软件QPainter 直接提供 drawEllipse 画圆#include QApplication #include QWidget #include QPainter class Win : public QWidget { public: void paintEvent(QPaintEvent*) override { QPainter p(this); p.drawEllipse(50,50,200,200); // 外接矩形画圆 } }; int main(int argc,char** argv){ QApplication a(argc,argv); Win w; w.show(); return a.exec(); }4. OpenGL / Vulkan3D 图形 APIOpenGL使用 GL_TRIANGLE_FAN 拼接扇形三角形模拟圆形Vulkan底层顶点缓冲区生成圆顶点高性能渲染游戏 / 渲染引擎使用。5. OpenCV计算机视觉库多用于图像处理直接提供画圆 API#include opencv2/opencv.hpp int main() { cv::Mat img(500,500,CV_8UC3,cv::Scalar(255,255,255)); cv::circle(img, cv::Point(250,250), 100, cv::Scalar(0,0,255), 3); cv::imshow(circle,img); cv::waitKey(0); return 0; }方法6操作系统原生 API注不依赖第三方库系统自带1. Windows GDIWin32 原生#include windows.h LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,PSTR,int) { HWND hwnd; MSG msg; WNDCLASS wc{}; wc.lpfnWndProcWndProc; wc.hInstancehInst; wc.lpszClassNameLCircleWin; RegisterClass(wc); hwndCreateWindow(wc.lpszClassName,LGDI圆,WS_OVERLAPPEDWINDOW,200,200,400,400,nullptr,nullptr,hInst,nullptr); ShowWindow(hwnd,SW_SHOW); while(GetMessage(msg,nullptr,0,0)){TranslateMessage(msg);DispatchMessage(msg);} return msg.wParam; } LRESULT CALLBACK WndProc(HWND h,UINT m,WPARAM,LPARAM){ PAINTSTRUCT ps; HDC hdc; switch(m){ case WM_PAINT: hdcBeginPaint(h,ps); Ellipse(hdc,100,100,300,300); // GDI画圆外接矩形 EndPaint(h,ps);break; case WM_DESTROY:PostQuitMessage(0);break; default:return DefWindowProc(h,m,0,0); } return 0; }2. Linux X11 / WaylandLinux 原生窗口系统 API底层绘制圆形多用于嵌入式 Linux。3. macOS CocoaObjective-C 混写macOS 原生图形框架 NSBezierPath 绘制圆形。方法7嵌入式 / 单片机 C 画圆注无操作系统1.OLED/LCD 屏幕驱动 Bresenham 圆算法直接操作显存2.LVGL嵌入式 GUI 库内置 lv_canvas_draw_circle。方法8专业图形学光栅化算法除中点圆还有两种经典画线画圆算法1.Bresenham 圆算法和中点圆思路接近全部使用整数运算无浮点早期硬件显卡底层通用2.参数方程离散采样法三角函数遍历所有角度适合曲线、椭圆、圆弧通用区别中点圆浮点少、效率高Bresenham 完全整数嵌入式单片机首选。各方法对比总结各方法对比总结方式依赖平台用途中点 / Bresenham 字符圆仅标准库全平台控制台简易演示、教学SFML/SDL2第三方库跨平台2D 小游戏、小型图形程序QtQt 库跨平台桌面 GUI 软件OpenCVOpenCV 库跨平台图像处理、机器视觉OpenGL/Vulkan图形驱动全平台3D 渲染、高性能画面Win32 GDIWindows 自带仅 WindowsWindows 原生桌面程序X11/Cocoa系统原生Linux/macOS对应系统底层开发LVGLLVGL 库嵌入式 MCU单片机屏幕显示附1改变圆的颜色的方法一、控制台字符画圆纯 C 标准库改文字颜色Windows 控制台用SetConsoleTextAttributeLinux/macOS 用ANSI转义码Windows 控制台彩色字符圆#include iostream #include cmath #include windows.h using namespace std; int main() { int r 10; // 获取控制台输出句柄 HANDLE hConsole GetStdHandle(STD_OUTPUT_HANDLE); // 颜色常量 // 4红色 2绿色 9蓝色 14黄色 15白色 SetConsoleTextAttribute(hConsole, 4); for (int y -r; y r; y) { for (int x -r; x r; x) { if (abs(x*x y*y - r*r) r) cout *; else cout ; } cout endl; } // 恢复默认白色 SetConsoleTextAttribute(hConsole, 15); return 0; }Linux/macOS ANSI 彩色#include iostream #include cmath using namespace std; int main() { int r 10; // \033[32m 绿色31红34蓝33黄0恢复默认 cout \033[32m; for (int y -r; y r; y) { for (int x -r; x r; x) { if (abs(x*x y*y - r*r) r) cout *; else cout ; } cout endl; } cout \033[0m; return 0; }二、EasyX 图形库Windows 专用最常用教学setfillcolor()改填充色setcolor()改轮廓边框色#include graphics.h int main() { initgraph(600, 400); // 1. 设置圆形边框颜色空心圆线条 setcolor(BLUE); circle(150, 200, 80); // 2. 设置填充颜色实心圆 setfillcolor(RED); fillcircle(400, 200, 80); _getch(); closegraph(); return 0; }内置颜色宏RED, GREEN, BLUE, YELLOW, WHITE, BLACK自定义 RGBsetfillcolor(RGB(200, 100, 50))三、SFML 跨平台图形库sf::CircleShape直接设置填充、描边颜色#include SFML/Graphics.hpp int main() { sf::RenderWindow win(sf::VideoMode(400, 400), 彩色圆); sf::CircleShape circle(100); // 填充色紫色 circle.setFillColor(sf::Color(150, 0, 200)); // 轮廓线颜色粗细 circle.setOutlineColor(sf::Color::Yellow); circle.setOutlineThickness(5); circle.setPosition(100, 100); while (win.isOpen()) { sf::Event e; while (win.pollEvent(e)) if (e.type sf::Event::Closed) win.close(); win.clear(); win.draw(circle); win.display(); } return 0; }四、Win32 GDI 系统原生 APIWindows 无第三方库通过画笔 HPEN改边框画刷 HBRUSH改填充颜色#include windows.h LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) { WNDCLASS wc{}; wc.lpfnWndProc WndProc; wc.hInstance hInst; wc.lpszClassName LColorCircle; RegisterClass(wc); HWND hwnd CreateWindow(wc.lpszClassName, LGDI彩色圆, WS_OVERLAPPEDWINDOW, 200, 200, 400, 400, nullptr, nullptr, hInst, nullptr); ShowWindow(hwnd, SW_SHOW); MSG msg; while (GetMessage(msg, nullptr, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM, LPARAM) { PAINTSTRUCT ps; HDC hdc; switch (msg) { case WM_PAINT: hdc BeginPaint(hWnd, ps); // 创建红色画笔圆形边框 HPEN redPen CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); // 创建绿色实心画刷 HBRUSH greenBrush CreateSolidBrush(RGB(0, 255, 0)); // 把画笔、画刷选入画布 SelectObject(hdc, redPen); SelectObject(hdc, greenBrush); // 画圆外接矩形 100,100 到 300,300 Ellipse(hdc, 100, 100, 300, 300); // 释放资源 DeleteObject(redPen); DeleteObject(greenBrush); EndPaint(hWnd, ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, 0, 0); } return 0; }五、OpenCV 图像处理画圆改颜色cv::Scalar(蓝,绿,红)设置线条颜色#include opencv2/opencv.hpp int main() { // 白色画布 cv::Mat img(500, 500, CV_8UC3, cv::Scalar(255,255,255)); // 圆心(250,250)半径100红色线条线宽5 cv::circle(img, cv::Point(250, 250), 100, cv::Scalar(0, 0, 255), 5); cv::imshow(彩色圆形, img); cv::waitKey(0); return 0; }核心总结控制台字符Windows 用SetConsoleTextAttributeLinux 用 ANSI 转义码EasyXsetcolor()边框setfillcolor()填充SFMLsetFillColor()填充setOutlineColor()描边Win32 GDIHPEN 控制边框、HBRUSH 控制内部填充OpenCV第三个参数cv::Scalar直接定义线条 RGB 颜色。画彩色圆示例一、EasyX功能蓝色边框、黄色实心圆#include graphics.h int main() { // 创建窗口 600宽 400高 initgraph(600, 400); // 1. 设置轮廓线条颜色 setcolor(BLUE); // 自定义RGB颜色 setcolor(RGB(0,100,200)) // 2. 设置内部填充颜色 setfillcolor(YELLOW); // 自定义粉色setfillcolor(RGB(255,100,180)) // 画实心圆圆心(300,200)半径100 fillcircle(300, 200, 100); _getch(); // 暂停窗口 closegraph(); return 0; }颜色说明内置常量RED GREEN BLUE YELLOW WHITE BLACK自定义任意色RGB(R, G, B)范围 0~255二、SFML 跨平台彩色圆#include SFML/Graphics.hpp int main() { // 创建窗口 sf::RenderWindow window(sf::VideoMode(500, 500), 彩色圆形); // 创建圆形半径120 sf::CircleShape circle(120); // 设置填充色紫色 RGB(180, 30, 220) circle.setFillColor(sf::Color(180, 30, 220)); // 设置描边颜色、粗细 circle.setOutlineColor(sf::Color::Green); circle.setOutlineThickness(6); // 移动圆心位置 circle.setPosition(100, 100); // 窗口循环 while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type sf::Event::Closed) window.close(); } window.clear(sf::Color::White); window.draw(circle); window.display(); } return 0; }三、Windows 原生 Win32 GDI无需第三方库红色边框、绿色实心圆#include windows.h LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int) { WNDCLASS wc {0}; wc.lpfnWndProc WndProc; wc.hInstance hInst; wc.lpszClassName LColorCircle; RegisterClass(wc); HWND hwnd CreateWindow(wc.lpszClassName, LGDI彩色圆, WS_OVERLAPPEDWINDOW, 100, 100, 500, 500, NULL, NULL, hInst, NULL); ShowWindow(hwnd, SW_SHOW); MSG msg; while (GetMessage(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM, LPARAM) { PAINTSTRUCT ps; HDC hdc; switch (msg) { case WM_PAINT: hdc BeginPaint(hWnd, ps); // 创建画笔红色线条宽度4 HPEN pen CreatePen(PS_SOLID, 4, RGB(255, 0, 0)); // 创建画刷绿色填充 HBRUSH brush CreateSolidBrush(RGB(0, 200, 0)); SelectObject(hdc, pen); SelectObject(hdc, brush); // 画圆外接矩形 (100,100) ~ (400,400) Ellipse(hdc, 100, 100, 400, 400); // 释放资源 DeleteObject(pen); DeleteObject(brush); EndPaint(hWnd, ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; }四、OpenCV 在图片上绘制彩色圆适合图像处理场景#include opencv2/opencv.hpp int main() { // 创建白色画布 500x500 cv::Mat canvas(500, 500, CV_8UC3, cv::Scalar(255, 255, 255)); // 参数画布圆心半径颜色(BGR)线宽(-1代表实心填充) // 橙色B0 G120 R255 cv::circle(canvas, cv::Point(250, 250), 150, cv::Scalar(0, 120, 255), -1); cv::imshow(彩色圆形, canvas); cv::waitKey(0); return 0; }关键要点总结EasyX轮廓色setcolor()填充色setfillcolor()实心圆fillcircle()SFMLsetFillColor()内部颜色setOutlineColor()边框颜色Win32 GDIHPEN 控制线条颜色HBRUSH 控制填充颜色OpenCVcv::Scalar(B, G, R)设置颜色最后参数填-1变成实心彩色圆颜色设置一、先分两类颜色体系内置常量色 自定义 RGB 全色系1. EasyX 内置颜色宏直接写名称无需 RGB// 基础单色 BLACK 黑色 WHITE 白色 RED 红 GREEN 绿 BLUE 蓝 YELLOW 黄 MAGENTA 品红/紫红 CYAN 青色/浅蓝 // 灰度、深浅色系 DARKGRAY 深灰 LIGHTGRAY 浅灰 BROWN 棕色 LIGHTRED 浅红 LIGHTGREEN 浅绿 LIGHTBLUE 浅蓝 LIGHTYELLOW 浅黄 LIGHTMAGENTA 浅品红 LIGHTCYAN 浅青使用示例setfillcolor(MAGENTA); fillcircle(300,200,100);2. RGB 自定义任意颜色所有图形库通用0~255公式RGB(红,绿,蓝)三个数值范围都是0 ~ 2551常用配色表直接复制使用1暖色系橙色RGB(255, 128, 0)粉色RGB(255, 150, 200)桃红色RGB(255, 80, 150)橘红RGB(255, 60, 0)土黄RGB(200, 160, 60)金色RGB(255, 215, 0)巧克力棕RGB(100, 50, 20)2冷色系天蓝色RGB(100, 180, 255)湖蓝RGB(0, 160, 220)藏青RGB(0, 40, 100)薄荷绿RGB(100, 240, 180)翡翠绿RGB(0, 180, 120)3紫色系紫罗兰RGB(150, 60, 220)薰衣草紫RGB(200, 160, 255)深紫RGB(80, 0, 150)4灰色系浅灰RGB(200, 200, 200)中灰RGB(120, 120, 120)深灰RGB(60, 60, 60)5黑白渐变纯白RGB(255,255,255)纯黑RGB(0,0,0)2EasyX 自定义颜色示例setfillcolor(RGB(255, 215, 0)); // 金色圆 fillcircle(300,200,100);3. SFML 颜色用法两种方式(1)内置静态常量sf::Color::Black sf::Color::White sf::Color::Red sf::Color::Green sf::Color::Blue sf::Color::Yellow sf::Color::Magenta sf::Color::Cyan sf::Color::Transparent // 完全透明(2)自定义 RGBcircle.setFillColor(sf::Color(255, 128, 0)); // 橙色4. Win32 GDI 颜色无内置名称只能用RGB(r,g,b)CreateSolidBrush(RGB(150,60,220)); // 紫罗兰5. OpenCV 特殊BGR 顺序格式cv::Scalar(B, G, R)// 橙色 R255 G128 B0 → Scalar(0,128,255) cv::circle(img, cv::Point(250,250), 100, cv::Scalar(0, 128, 255), -1);二、进阶半透明颜色EasyX / SFML1.EasyX 带透明度 RGB 第四个参数0~255RGB(r,g,b,a)a越小越透明setfillcolor(RGB(255,0,0,100)); // 半透明红色圆2.SFML 透明// 第4参数Alpha透明度 circle.setFillColor(sf::Color(255,0,0,100));三、补充说明理论上 RGB 组合总共有 256×256×256 16777216种不同颜色只要调整三个数字就能调出任意色彩内置宏只是系统提前封装好的常用色想要独特配色全部用RGB()自定义OpenCV 一定要注意蓝绿红顺序和其他库相反容易画错颜色。附2不用写 C 代码绘制彩色圆形的各类方法一、系统自带绘图软件1.Windows画图MS Paint工具栏选圆形工具拖动画圆顶部调色板直接选彩色点击「填充」按钮即可做出实心彩色圆支持自定义 RGB 调色、粗细边框、透明填充。打开方式开始菜单搜索「画图」3D 画图Paint 3D可画 2D 彩色圆还能做成立体球体渐变 / 纹理填充。2.macOS预览Preview随便打开一张空白图片顶部「标记」→形状工具选圆形右侧改填充色、描边色。Grapher自带数学绘图工具可生成彩色函数圆。3.LinuxKolourPaint类画图工具、GIMP形状工具一键画彩色圆调色盘自由换色。二、专业图像设计软件适合精细彩色圆形无编程Photoshop / Photopea网页版 PS 免费椭圆工具按住 Shift 画正圆图层样式填充任意纯色、渐变、花纹支持半透明彩色圆。Illustrator / Figma / Canva可画矢量圆矢量圆形放大不失真可设置渐变色、阴影、多色描边常用于海报、图标。GIMP免费开源、Krita绘画向软件圆形选区 油漆桶填充彩色。三、在线网页工具不用安装任何软件Photopea网页 PS浏览器直接打开椭圆工具画彩色圆Canva 可画模板内添加圆形一键更换填充色Pixlr在线绘图形状工具快速生成彩色实心 / 空心圆简易在线绘图网如 sketch.io鼠标拖拽画圆实时切换颜色。四、办公软件日常办公随手画Word / WPS 文字 / PPT / Excel 操作插入 → 形状 → 椭圆按住 Shift 画标准圆形 右键「设置形状格式」修改填充颜色、轮廓颜色、渐变、透明度。石墨文档、飞书文档、腾讯文档在线办公 插入形状功能同样支持自定义彩色圆形。五、数学 / 绘图工具函数生成彩色圆少量配置不用代码GeoGebra几何画板跨平台免费输入圆方程x²y²25自动生成圆右侧属性面板直接修改线条颜色、填充颜色支持渐变彩色完全不用编程鼠标操作。Desmos网页函数绘图 输入圆参数方程在设置里更改曲线颜色。六、手机端 APP移动端画彩色圆绘画类ProcreateiPad、画世界、Medibang 形状辅助工具绘制正圆画笔 / 填充工具上色修图类醒图、美图秀秀贴纸内置彩色圆形素材直接选用。七、硬件手绘纯手工无电子设备圆规 彩笔 / 水彩 / 马克笔纸上手绘彩色圆形数位板手绘软件上面提到的 Procreate、Krita手动画圆并上色。八、低代码 / 可视化工具几乎不用手写完整 CScratch 图形化编程拖拽积木块绘制彩色圆形只拼模块不写代码Processing 图形化编辑器少量简单指令偏向可视化而非完整 CLVGL 拖拽 UI 编辑器嵌入式屏幕拖拽生成彩色圆控件自动生成底层代码无需手动写绘图逻辑。分类小结最快随手画系统自带画图、PPT/WPS专业精美矢量圆Figma、Canva、AI数学几何圆GeoGebra无需安装Photopea、Desmos 网页工具完全脱离电子设备圆规 彩笔手绘。以上是关于C画圆的大部分基础内容如果你想要更加精致、精确的画圆方法请查阅进阶教程或观看相关教学视频。THE END