Rekursive skildpadder Supertrekanter....
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.2 Penta, etc. triangle penta poly macro pasta bigMac semiFinal finale ultimo finitto
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.3 Hvordan tegnes en macro? macro(160); poly(80); penta(40); triangle(20); penta(40); triangle(20);
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.4 Tegning af macro...
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.5 Omdøbning triangle penta poly macro pasta bigMac semiFinal finale ultimo finitto superTriangle 0 superTriangle 1 superTriangle 2 superTriangle 3 superTriangle 4 superTriangle 5 superTriangle 6 superTriangle 7 superTriangle 8 superTriangle 9
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.6 poly og macro public void poly(int l) { penta(l/2); move(l/2); penta(l/2); turn(120); move(l/2); turn(-120); penta(l/2); turn(-120); move/l/2); turn(120); } public void macro(int l) { poly(l/2); move(l/2); poly(l/2); turn(120); move(l/2); turn(-120); poly(l/2); turn(-120); move/l/2); turn(120); }
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.7 superTriangle 2 og 3 public void superTriangle2(int l) { superTriangle1(l/2); move(l/2); superTriangle1(l/2); turn(120); move(l/2); turn(-120); superTriangle1(l/2); turn(-120); move/l/2); turn(120); } public void superTriangle3(int l) { superTriangle2(l/2); move(l/2); superTriangle2(l/2); turn(120); move(l/2); turn(-120); superTriangle2(l/2); turn(-120); move/l/2); turn(120); }
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.8 Parametrisering public void superTriangle(int d, int l) { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move/l/2); turn(120); } superTriangle(3, 160); svarer til macro(160); superTriangle(2, 160); svarer til poly(160); superTriangle(1, 160); svarer til penta(160); UPS!... superTriangle(0, 160); svarer til
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.9 Fuldstændig løsning public void superTriangle(int d, int l) { // d >= 0 if ( d == 0 ) triangle(l); else { superTriangle(d-1, l/2); move(l/2); superTriangle(d-1, l/2); turn(120); move(l/2); turn(-120); superTriangle(d-1, l/2); turn(-120); move/l/2); turn(120); } superTriangle(3, 160); svarer til macro(160); superTriangle(2, 160); svarer til poly(160); superTriangle(1, 160); svarer til penta(160); superTriangle(0, 160); svarer tiltriangle(160);
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.10 Hvordan tegnes en penta? sT(1,40); sT(0,20); sT: superTriangle triangle(20); penta penta: 3 små trekanter
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.11 Hvordan tegnes en poly? sT(2,80); sT(1,40); poly penta poly: = 9 små trekanter
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.12 Hvordan tegnes en macro? sT(3,160); sT(2,80); poly macro: = 27 små trekanter
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.13 Udfoldet rekursionstræ sT(3,160); sT(2,80); sT(1,40); sT(0,20);
Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.14 Tegning af macro...