绘制希尔伯特曲线

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

时间: 2024-10-06 21:01:24

绘制希尔伯特曲线的相关文章

Sketch Nyquist plot 徒手绘制Nyquist 曲线

Sketch Nyquist plot 这是相当纠结的领悟.我始终没明白Nyquist曲线究竟是怎么回事,简直痛苦 之前讲了 波特图入门 徒手绘制波特图 波特图就是讲幅频特性和相频特性分别绘制在两幅图片上,而Nyquist曲线是将这两幅图合并成一幅图. 现实生活中多是黑箱模型,系统内部的结构是不知道的,为了测试系统的幅频特性和相频特性,会采用向系统输入各种频率不同的正弦信号的形式,(默认线性系统),这样得到输出信号和输入信号做比较.每一个频率都有对应的输出幅值和相角! 什么是Nyquist曲线?

【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁 2011-07-14 10:34:54|  分类: 学习笔记 |  标签:双缓冲绘图技术  mfc  动态曲线   |举报 |字号 订阅 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新.一.如何绘制动态曲线. 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静

C#WPF 如何绘制几何图形 图示教程 绘制sin曲线 正弦 绘制2D坐标系 有图有代码

C#WPF 如何绘制几何图形? 怎么绘制坐标系? 这离不开Path(System.Windows.Shapes)和StreamGeometry(System.Windows.Media)类. 一.建立WPF工程 二.添加代码 MainWindow.xaml 中代码 <Window x:Class="WPFDrawingTraning.MainWindow"         xmlns="<a target=_blank href="http://sche

canvas绘制贝塞尔曲线

原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1.P2的函数B(t)追踪: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <

Matlab 如何绘制复杂曲线的包络线

Matlab 如何绘制复杂曲线的包络线 http://jingyan.baidu.com/article/aa6a2c14d36c710d4c19c4a8.html 如果一条曲线(比如声音波形)波动很大,曲折复杂,可以通过绘制包络线的方式使其更加平滑和清晰.本经验帮助刚接触matlab不久的新手完成这一过程. 工具/原料 Matlab 软件 样本数据 方法/步骤 处理前后的效果对比,图示为某声波傅里叶变换(fft)后的频谱图.   原数据为横纵坐标为 frequency 和 Amplitude,

C++模拟Turtle画希尔伯特曲线

由于缺少支持库,本代码不可实际运行! 仅供思路研究. 1 void up() 2 { 3 turtle.forward(1); 4 } 5 void left() 6 { 7 turtle.left(90); 8 turtle.forward(1); 9 turtle.right(90); 10 } 11 void right() 12 { 13 turtle.right(90); 14 turtle.forward(1); 15 turtle.left(90); 16 } 17 void do

4. 绘制光谱曲线QGraphicsView类

一.前言 Qt的QGraphicsView类具有强大的视图功能,与其一起使用的还有QGraphicsScene类和QGraphicsItem类.大体思路就是通过构建场景类,然后向场景对象中增加各种图元,最后利用QGraphicsView类对场景进行显示. 二.绘制光谱曲线 实现功能主要有: 1 传递点击图像行列号,然后绘制曲线,代码如下: 1 void SpectralProfileDialog::AddPressSlot() 2 { 3 //setModal(0); 4 HyperProces

pyqt中使用matplotlib绘制动态曲线

一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则左移1秒刻度,实现动态效果 2)Y轴显示随机变化的数值,1-100 三.准备工作 1环境:python3.3,eric5,pyqt4 四.开始动手: 使用Eric创建新项目: 在设计编码前期主要用到Eric的两个窗口:源码和窗体浏览器,类似delphi.

希尔伯特曲线

希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和右下角终点),恰好覆盖每个方格一次. [p1.png] Hn(n > 1)可以通过如下方法构造:1. 将 Hn-1 顺时针旋转90度放在左下角2. 将 Hn-1 逆时针旋转90度放在右下角3. 将2个 Hn-1 分别放在左上角和右上角4. 用3条单位线段把4部分连接起来 对于 Hn 上每一个顶点 p ,我们定义 p 的坐标是