首页 > 代码库 > C++模拟Turtle画希尔伯特曲线

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阶希尔伯特曲线。

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