• 绘制希尔伯特曲线


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

  • 相关阅读:
    关于SimpleDateFormat安全的时间格式化线程安全问题
    JAVA多线程和并发基础面试问答
    探秘Java中的String、StringBuilder以及StringBuffer
    Java开发岗位面试题归类
    Java并发编程:阻塞队列
    Shell基本概述
    Ansible--06 ansible roles
    Ansible --05 ansible jinja2
    Ansible--04 ansible 流程控制
    Ansible--03 ansible 变量
  • 原文地址:https://www.cnblogs.com/guocm/p/4118061.html
Copyright © 2020-2023  润新知