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 down()
18 {
19     turtle.left(180);
20     turtle.forward(1);
21     turtle.right(180);
22 }
23 //假设一开始头向上
24 void move(int direction)
25 {
26     if(direction==0) left();
27     else if(direction==1) up();
28     else if(direction==2) right();
29     else down();
30 }
31
32 //a[type][step]表示当前状态为type时第step步应使用哪种type
33 int a[4][9]=
34 {
35     {0,3,0,1,2,1,0,3,0},
36     {1,2,1,0,3,0,1,2,1},
37     {2,1,2,3,0,3,2,1,2},
38     {3,0,3,2,1,2,3,0,3}
39 }
40 //b[type][step]表示当前状态为type时第step步后应向哪个方向走一步
41 //0左,1上,2右,3下
42 int b[4][8]=
43 {
44     {1,1,2,3,3,2,1,1},
45     {3,3,2,1,1,2,3,3},
46     {3,3,0,1,1,0,3,3},
47     {1,1,0,3,3,0,1,1}
48 }
49
50 void draw(int type,int level)//type:0左下,1左上,2右上,3右下,level表示迭代层数
51 {
52     if(!level) return;
53     draw(a[type][0]);
54     for(int i=1;i<9;i++)
55     {
56         move(b[type][i-1]);
57         draw(a[type][i]);
58     }
59 }

在调用draw(0,n)时,理论上以上代码可画出n阶希尔伯特曲线。

时间: 2024-08-28 18:09:43

C++模拟Turtle画希尔伯特曲线的相关文章

怎样一步步用D3画多曲线

Bar Chart: http://bl.ocks.org/mbostock/3885304 这是一个画柱状图的基本形式. Axis是数轴: tickets是数轴上的标尺.tickets第二个參数% 能够使[0, 1]的数以百分比显示: rangeRoundBands 在[0, width] 上按区间划分.正好适合柱状图,rangePoints 在[0, width] 上按点位划分: transform 是相对于父节点变换坐标的数目. function type 先于load tsv文件运行.程

python sklearn画ROC曲线

preface:最近<生物信息学>多次谈到AUC,ROC这两个指标,正在做的project,要求画ROC曲线,sklearn里面有相应的函数,故学习学习. AUC: ROC: 具体使用参考sklearn: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html http://scikit-learn.org/stable/auto_examples/model_selection/plot_

MATLAB画ROC曲线,及计算AUC值

根据决策值和真实标签画ROC曲线,同时计算AUC的值 function auc = roc_curve(deci,label_y) %%deci=wx+b, label_y, true label [val,ind] = sort(deci,'descend'); roc_y = label_y(ind); stack_x = cumsum(roc_y == -1)/sum(roc_y == -1); stack_y = cumsum(roc_y == 1)/sum(roc_y == 1); a

用turtle画中国象棋棋盘

刚刚学习了<Python入门教程(一)--Python语言基础视频课程>(http://edu.51cto.com/course/12194.html) 中间有道作业就是用turtle画中国象棋棋盘,试了半天,终于画出来了,不知道是不是这么画的,所以贴上来,求指点,求更好的方法! #画中国象棋棋盘 import turtle import math turtle.speed(10)#绘图速度 a = 30 #每个格子的宽度 #绘制底板并上色 turtle.up() turtle.goto( -

python用turtle画国际象棋棋盘

python学习的练习 用turtle画的国际象棋棋盘 import turtle turtle.speed(10) a = 30 #画背景 turtle.up() turtle.goto( -10, -10) turtle.down() turtle.fillcolor("Khaki") turtle.begin_fill() turtle.fd( a * 8 + 20) turtle.left(90) turtle.fd( a * 8 + 20) turtle.left(90) t

希尔伯特曲线

希尔伯特曲线是以下一系列分形曲线 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 的坐标是

*【Python】【demo实验31】【练习实例】【使用turtle画小猪佩奇】

如下图小猪佩奇: 要求使用turtle画小猪佩奇: 源码: # encoding=utf-8 # -*- coding: UTF-8 -*- # 使用turtle画小猪佩奇 from turtle import* def nose(x,y):#鼻子 penup()#提起笔 goto(x,y)#定位 pendown()#落笔,开始画 setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东.90-北.180-西.270-南) begin_fill()#准备开始填充图形 a

函数实例-turtle画树

# drawtree.py from turtle import Turtle, mainloop def tree(plist, l, a, f): """ plist is list of pens l is length of branch a is half of the angle between 2 branches f is factor by which branch is shortened from level to level.""&

JS模拟CSS3动画-贝塞尔曲线

一.什么是贝塞尔曲线 1962年,法国工程师皮埃尔·贝塞尔(Pierre Bézier),贝塞尔曲线来为为解决汽车的主体的设计问题而发明了贝塞尔曲线.如今,贝赛尔曲线是计算机图形学中相当重要的一种曲线,它能过优雅地模拟人手绘画出的线.它通过控制曲线上的点(起始点.终止点以及多个参考点)来创造.编辑图形.其中起重要作用的是位于曲线中央的控制线.这条线是虚拟的,中间与贝塞尔曲线交叉,两端是控制端点.移动两端的端点时贝塞尔曲线改变曲线的曲率(弯曲的程度):移动中间点(也就是移动虚拟的控制线)时,贝塞尔