This algorithm is used to generate Koch fragment (coastline, snowflake) with fast speed and brilliant effects.
// The horizontal angle of the supported initial straight line is a multiple of 60. You can change the starting point and ending point coordinates to generate void Koch (CDC * PDC, int X1, int Y1, int X2, int Y2, int N) {If (n> 0) {Double K = 1.0 * (Y2-Y1)/(x2-X1); int X3 = (x2-X1) /3; int Y3 = (Y2-Y1)/3; Koch (PDC, X1, Y1, X1 + X3, Y1 + Y3, n-1); Koch (PDC, x2-X3, Y2-Y3, X2, Y2, n-1); If (ABS (k) <= 1e-6) {Koch (PDC, X1 + X3, Y1, x1 + X3 + X3/2, Y1 + SQRT (3.0)/2 * X3, n-1); Koch (PDC, X1 + X3 + X3/2, y1 + SQRT (3.0)/2 * X3, x2-X3, Y1, n-1);} else if (k> 0) {Koch (PDC, X1, y2-Y3, x2-X3, Y2-Y3, n-1); Koch (PDC, X1 + X3, Y1 + Y3, X1, Y2-Y3, n-1);} else {Koch (PDC, X1 + X3, Y1 + Y3, X2, Y1 + Y3, n-1); Koch (PDC, X2, y1 + Y3, x2-X3, Y2-Y3, n-1) ;}} else {PDC-> moveTo (x1, Y1); PDC-> lineto (X2, y2 );}}
Call:
Int K = 4; // recursive depth cpen pen, * oldpen; pen. createpen (ps_solid, 1, RGB (255, 800,150,440,150); oldpen = PDC-> SelectObject (& pen); Koch (PDC, k); pen. deleteobject (); pen. createpen (ps_solid, 1, RGB (0,255, 0); PDC-> SelectObject (& pen); Koch (PDC, 440,200,800,200, k); pen. deleteobject (); pen. createpen (ps_solid, 1, RGB (0, 0,255); PDC-> SelectObject (& pen); Koch (PDC, 200,100,300,275, k); Koch (PDC, 400,100,200,100, k); Koch (PDC, 300,275,400,100, k); pen. deleteobject (); PDC-> SelectObject (oldpen );
The four recursion times are as follows:
Koch fractal, coastline, snowflake