給定大三角形頂點 P1, P2, P3 和遞歸深度 n:
#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;
}
| 平台 | 配置方法 |
|---|---|
| Windows + MinGW (VS Code/Code::Blocks) | 下載 WinBGIm,將 graphics.h、libbgi.a 放入 MinGW include/lib 目錄,鏈接 -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 |
| Windows + Visual Studio | NuGet 安裝 WinBGIm 或手動配置 include/lib 目錄,同上鏈接庫 |
| Linux | 安裝 libgraph (Ubuntu: sudo apt install libgraph-dev),頭文件 graphics.h,鏈接 -lgraph |
| 現代替代方案 | 使用 SDL2、SFML、Raylib、OpenGL 繪製,跨平台、硬體加速、無 BGI 依賴 |