转自:http://www.easyx.cn/samples/View.aspx?id=57
#include "stdafx.h"
#include <graphics.h>
#include <conio.h>#include <string>using namespace std;int g_len; // Hilbert 曲线的单位长度
//string a;//string a = "123";// 递归绘制 Hilbert 曲线
void hilbert(string cmd, int level){ static BYTE d = 0; // 方向 static POINT c[4] = {1, 0, 0, -1, -1, 0, 0, 1}; // 方向对应的轴系数if (level < 0) return;
// 处理命令字符串
int i = 0; while(cmd[i]) { switch(cmd[i++]) { case '+': d = (d + 1) & 3; break; case '-': d = (d - 1) & 3; break; case 'X': hilbert("+YF-XFX-FY+", level - 1); break; case 'Y': hilbert("-XF+YFY+FX-", level - 1); break; case 'F': linerel(c[d].x * g_len, c[d].y * g_len); break; } }}// 主函数
char a;void main(){ // 设置绘图环境 initgraph(800, 600); // 设置窗口大小 outtextxy(20, 550, a); rectangle(143, 23, 657, 537); // 绘制表示范围的矩形框 setorigin(144, 24); // 设置原点坐标 setcolor(RED); // 设置颜色 setfillstyle(BLACK);int level = '5'; // 设置初始级别
do
{ if (level >= '1' && level <= '10') // 仅处理 1~8 { level -= '0'; // 转换为对应的数字值 bar(0, 0, 511, 511); // 清空绘图区 g_len = 512 >> level; // 计算单位长度 moveto(g_len / 2, 512 - g_len / 2); // 设定起点hilbert("X", level); // 递归绘制 Hilbert 曲线
} }while( (level =_getch()) != 27 ); // 按 ESC 退出
// closegraph();
}/*#include <graphics.h>#include <conio.h>#include <stdio.h>#include <stdio.h>void star1(int x, int y, int r);
void star2(int x, int y, int r);void main()
{ int graphdriver, graphmode, x, y, r; graphdriver = DETECT; initgraph(&graphdriver, &graphmode, " "); setcolor(LIGHTMAGENTA); star1(160, 160, 80); _getch(); star2(480, 320, 80); _getch();}void star1(int x, int y, int r)
{ if(r > 0) { star1(x - r, y + r, r/2); star1(x + r, y + r, r/2); star1(x - r, y - r, r/2); star1(x + r, y - r, r/2); bar(x - r, y + r, x + r, y - r); }}void star2(int x, int y, int r)
{ if(r > 0) { star2(x - r, y + r, r/2); star2(x + r, y + r, r/2); star2(x - r, y - r, r/2); star2(x + r, y - r, r/2); rectangle(x - r, y + r, x + r, y - r); }}*/