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