首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言遞歸繪製謝爾賓斯基三角形:graphics.h 圖形編程教學

     編輯:C 語言問答

遞歸繪圖經典:謝爾賓斯基三角形 (Sierpinski Triangle)

算法原理

給定大三角形頂點 P1, P2, P3 和遞歸深度 n:

  1. 畫出當前三角形三條邊。
  2. 若 n > 0,計算三邊中點 M12, M13, M23。
  3. 遞歸繪製四個子三角形:(P1, M12, M13), (P2, M12, M23), (P3, M13, M23), (M12, M13, M23),深度 n-1。

完整代碼 (基於 graphics.h / WinBGIm)

#include <stdio.h>
#include <graphics.h>  // 需安裝 WinBGIm (MinGW) 或使用 Turbo C/Borland C

typedef struct { int x, y; } Point;

Point mid(Point a, Point b) {
    return (Point){(a.x + b.x)/2, (a.y + b.y)/2};
}

void draw_triangle(Point a, Point b, Point c) {
    line(a.x, a.y, b.x, b.y);
    line(a.x, a.y, c.x, c.y);
    line(b.x, b.y, c.x, c.y);
}

void sierpinski(Point p1, Point p2, Point p3, int n) {
    if (n <= 0) return;
    draw_triangle(p1, p2, p3);
    Point m12 = mid(p1, p2);
    Point m13 = mid(p1, p3);
    Point m23 = mid(p2, p3);
    sierpinski(p1, m12, m13, n-1);
    sierpinski(p2, m12, m23, n-1);
    sierpinski(p3, m13, m23, n-1);
    sierpinski(m12, m13, m23, n-1);
}

int main() {
    int gd = DETECT, gm;
    initgraph(&gd, &gm, "");  // 路徑留空自動尋找 BGI 驅動
    Point p1 = {300, 50}, p2 = {50, 400}, p3 = {550, 400};
    for (int n = 1; n <= 6; ++n) {
        cleardevice();
        sierpinski(p1, p2, p3, n);
        getch();
    }
    closegraph();
    return 0;
}

環境配置指南

教學價值

  • 直觀展示遞歸分治、幾何分形、坐標幾何結合。
  • 理解遞歸基線條件 (n<=0) 與問題規模縮減 (n-1)。
  • 圖形庫基本繪圖函數 (line, circle, putpixel) 使用。

注意

graphics.h 是 Borland 時代產物,非標準 C。現代教學建議改用跨平台圖形庫,但算法邏輯完全通用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
平台配置方法
Windows + MinGW (VS Code/Code::Blocks)下載 WinBGIm,將 graphics.h、libbgi.a 放入 MinGW include/lib 目錄,鏈接 -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32
Windows + Visual StudioNuGet 安裝 WinBGIm 或手動配置 include/lib 目錄,同上鏈接庫
Linux安裝 libgraph (Ubuntu: sudo apt install libgraph-dev),頭文件 graphics.h,鏈接 -lgraph
現代替代方案使用 SDL2、SFML、Raylib、OpenGL 繪製,跨平台、硬體加速、無 BGI 依賴