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

转载于:https://www.cnblogs.com/ArrowKeys/p/6665812.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值