OPENW #1,_X / 2 - 320,_Y / 2 - 220,640,440,&X110000 TITLEW #1,"Fractale par segments Version 2" lmin% = 4 x1 = 20,y1 = _Y / 2,x2 = _X - 20,y2 = _Y / 2 Precalc f x1,y1,h,a DO PEEKEVENT EXIT IF MENU(1) = 4 MOUSE x%,y%,K% IF _Mess = WM_PAINT Precalc f(x1,y1,h,a) ENDIF IF K% = 1 THEN x1 = x%,y1 = y% Precalc f(x1,y1,h,a) ENDIF IF K% = 2 THEN x2 = x%,y2 = y% Precalc f(x1,y1,h,a) ENDIF f$ = INKEY$ IF f$ = "+" INC lmin% Precalc f(x1,y1,h,a) ENDIF IF f$ = "-" AND lmin% > 1 DEC lmin% Precalc f(x1,y1,h,a) ENDIF EXIT IF f$ = " " LOOP CLOSEW #1 PROCEDURE Precalc lx = x2 - x1,ly = y2 - y1 h = SQR(lx ^ 2 + ly ^ 2) IF h > 0 THEN lx = lx / h a = ASIN(lx) IF y2 < y1 THEN a = PI - a CLS TEXT 0,0,"x=" + STR$(x1) + " y=" + STR$(y1) + " L=" + STR$(h) + " a=" + STR$(a) + " LMIN=" + STR$(lmin%) TEXT 0,20,"Clic gauche = point de départ, Clic droit : d'arrivée Touches + et - pour changer LMIN" TEXT 0,40,"Barre espace pour quitter" RETURN PROCEDURE f(x,y,l,a) LOCAL ll,aa,s,c IF l > lmin% THEN aa = a l = l / 4 f(x,y,l,a) s = SIN(a) * l,c = COS(a) * l x = x + s, y = y + c a = a - 1.5707963267949 f(x,y,l,a) x = x - c, y = y + s a = a + 2.35619449019234 ll = l * 2.82842712474619 f(x,y,ll,a ) x = x + SIN(a) * ll y = y + COS(a) * ll a = a - 2.35619449019234 f(x,y,l ,a) f(x - c,y + s,l,aa) ELSE LINE x,y,x + SIN(a) * l,y + COS(a) * l ENDIF RETURN