FULLW #1 TITLEW #1,"VENUS pour exposé Version 1" PROMPT "Combien d'étapes ?","Entrez le nombre d'étapes de décomposition du mouvement de vénus autour du soleil (2 à 15)",a$ NE% = MAX(2,VAL(a$)) W% = _Y / SQR(2) Venus _X / 2 - W% / 2,0,_X / 2 + W% / 2,_Y ALERT 1,"Voulez-vous l'imprimer ?",1,"Oui|Non",r% IF r% = 1 ImprimerVenus ENDIF CLOSEW #1 EDIT SYSTEM PROCEDURE Venus(x1%,y1%,x2%,y2%) W% = x2% - x1 H% = y2% - y1% Mx% = (x1% + x2%) / 2 My% = (y1% + y2%) / 2 RayonSoleil = W% / 5 RayonVenus = RayonSoleil / 5 TW% = RayonSoleil / 12 TH% = RayonSoleil / 4 FONT "arial", WIDTH TW%,HEIGHT TH% TO fonte% SETFONT fonte% Cercle Mx%,My%,RayonSoleil,4 TEXT Mx% - TXTLEN("SOLEIL") / 2,My% - TH% / 2,"SOLEIL" NRS% = 40 trs = RayonSoleil / 5 p = 2 * PI / NRS% 'Rayons Du soleil FOR i% = 0 TO PRED(NRS%) IF MOD(i%,2) = 0 trs = trs / 2 ELSE trs = trs * 2 ENDIF FOR r = RayonSoleil + trs TO RayonSoleil STEP -0.02 v1 = (RayonSoleil + trs - r) / trs a = -v1 / 20 + i% * p + SIN(v1 * 15) / 20 * v1 / 2 RSx = Mx% + SIN(a) * r '(RayonSoleil + trs) RSy = My% + COS(a) * r '(RayonSoleil + trs) PLOT RSx,RSy a = a + v1 / 10 RSx = Mx% + SIN(a) * r '(RayonSoleil + trs) RSy = My% + COS(a) * r '(RayonSoleil + trs) PLOT RSx,RSy NEXT r NEXT i% 'Fin des rayons du soleil rap = 234 / 225 p = (rap * 2 * PI) / PRED(NE%) p2 = (2 * PI / PRED(NE%)) OrbiteVenus = RayonSoleil * 1.9 FOR i% = 0 TO PRED(NE%) a = -i% * p x = Mx% + SIN(a) * OrbiteVenus y = My% + COS(a) * OrbiteVenus Cercle x,y,RayonVenus,2 ' Ombre FOR yy = y - RayonVenus TO y + RayonVenus STEP 3 FOR xx = x - RayonVenus TO x + RayonVenus STEP 3 h = SQR((xx - x) ^ 2 + (yy - y) ^ 2) IF h < RayonVenus h = SQR((xx - Mx%) ^ 2 + (yy - My%) ^ 2) IF h > OrbiteVenus PLOT xx,yy ENDIF ENDIF NEXT xx NEXT yy ' Fin de l'ombre dx1 = x + SIN(a + PI / 2) * RayonVenus dy1 = y + COS(a + PI / 2) * RayonVenus dx2 = x - SIN(a + PI / 2) * RayonVenus dy2 = y - COS(a + PI / 2) * RayonVenus Ligne dx1,dy1,dx2,dy2,1 af$ = STR$(i% + 1) GRAPHMODE ,TRANSPARENT TEXT x - TXTLEN(af$) / 2,y - TH% / 2,af$ a = i% * p2 bx1 = x + SIN(a) * RayonVenus * 1.5 by1 = y + COS(a) * RayonVenus * 1.5 bx2 = x + SIN(a) * RayonVenus by2 = y + COS(a) * RayonVenus Ligne bx1,by1,bx2,by2,4 bx = bx1 + SIN(a + 2.3) * RayonVenus / 2 by = by1 + COS(a + 2.3) * RayonVenus / 2 Ligne bx1,by1,bx,by,2 bx = bx1 + SIN(a - 2.3) * RayonVenus / 2 by = by1 + COS(a - 2.3) * RayonVenus / 2 Ligne bx1,by1,bx,by,2 bx1 = x + SIN(a) * RayonVenus * 1.6388888 by1 = y + COS(a) * RayonVenus * 1.6388888 Cercle bx1,by1,RayonVenus / 7,1 NEXT i% FREEFONT fonte% RETURN PROCEDURE Ligne(x1,y1,x2,y2,ep) DEFLINE 2,ep LINE x1,y1,x2,y2 RETURN PROCEDURE Cercle(x,y,r,ep) LOCAL p,a,s,c,xx,yy,pp,tp p = (PI / r) / 4 a = 0 pp = ep / 2 DO a = a + p s = SIN(a) c = COS(a) xx = x + s * (r + ep / 2) yy = y + c * (r + ep / 2) tp = 0 DO PLOT xx,yy xx = xx - s / 2 yy = yy - c / 2 tp = tp + 0.5 EXIT IF tp > ep ' PAUSE 1 ' ? tp,ep LOOP EXIT IF a > 2 * PI LOOP RETURN PROCEDURE ImprimerVenus ALERT 1,"Taille d'impression :",1,"A4 Pleine page|Demi A4|1/4 de page",ti% IF ti% = 2 OR ti% = 3 ALERT 1,"Imprimer un cadre ?",1,"Oui|Non",Cadre% ENDIF pdc& = PrinterDC() IF pdc& SETDC pdc& px% = GETDEVCAPS(HORZRES) py% = GETDEVCAPS(VERTRES) ~Escape(pdc&,STARTDOC,4,"TEST",0) IF ti% = 1 Venus 0,0,px%,py% ELSE IF ti% = 2 Venus 0,0,px% / SQR(2),px% IF Cadre% = 1 BOX 1,1,px% / SQR(2) - 1,px% - 1 ENDIF ELSE Venus 0,0,px% / 2,py% / 2 IF Cadre% = 1 BOX 1,1,px% / 2 - 1,py% / 2 - 1 ENDIF ENDIF ~Escape(pdc&,NEWFRAME,0,0,0) ~Escape(pdc&,ENDDOC,0,0 ,0) SETDC _DC(1) FREEDC pdc& ENDIF RETURN