满意答案
zxy5510
2019.07.03
采纳率:56% 等级:7
已帮助:309人
#include #include int g_len; // Hilbert 曲线的单位长度 // 递归绘制 Hilbert 曲线void hilbert(LPCTSTR 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; } }} // 主函数void main(){ // 设置绘图环境 initgraph(800, 600); // 设置窗口大小 outtextxy(20, 550, "按 1~8 显示不同级别的 Hilbert 曲线,按 ESC 退出。"); rectangle(143, 23, 657, 537); // 绘制表示范围的矩形框 setorigin(144, 24); // 设置原点坐标 setcolor(RED); // 设置颜色 setfillstyle(BLACK); int level = '5'; // 设置初始级别 do { if (level >= '1' && level <= '8') // 仅处理 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();}
00分享举报