博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
绘制希尔伯特曲线
阅读量:7227 次
发布时间:2019-06-29

本文共 1981 字,大约阅读时间需要 6 分钟。

转自: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);
}
}*/

转载于:https://www.cnblogs.com/guocm/p/4118061.html

你可能感兴趣的文章
插入透明背景Flash的HTML代码
查看>>
无标题
查看>>
我的友情链接
查看>>
Web前端入门学习(3)——CSS选择器
查看>>
DNS的搭建
查看>>
Apache/Nginx 访问日志分析脚本
查看>>
Curator的使用
查看>>
第五章 集合类型
查看>>
我的友情链接
查看>>
nagios监控服务出现FLAPPING状态时无法发出邮件报警信息
查看>>
数据库链接字符串方法
查看>>
The DCI Architecture: A New Vision of Object-Oriented Programming(一篇具有里程碑式意义的论文)...
查看>>
RIP路由配置实例V2
查看>>
Bytescout Spreadsheet SDK for.NET
查看>>
我的友情链接
查看>>
Haproxy的三种保持客户端会话保持方式
查看>>
iOS的数学函数
查看>>
python 模块 chardet下载及介绍(转)
查看>>
能力工场--关于在JavaScript中使用EL表达式的问题
查看>>
NFS服务器设置
查看>>