rocbo menu

 
1 '---------- courbe de Bézier --------
2 '
3 '     par Rocanin-Borraz Jean-Max
4 '         calculs par itérations
5 '         gwbasic janvier 1989
9'
10 GOSUB 900     ' init
20 GOSUB 100     ' saisie du polygone
30 GOSUB 200     ' dessin
70 WHILE FIN=0
80   GOSUB 400   ' dessin
90   GOSUB 550   ' fin ou option?
94   GOSUB 500   ' fenêtre
95 WEND
98 END '-------------------------------
99 '
 
100 'Saisie du Polygone .................................................
105  CLS
110  LOCATE 5,3 :PRINT "SAISIE DES POLES DU POLYGONE"
115  FOR I=0 TO POLESG-1
120   LOCATE 6,3 :PRINT"pôle ";I
125   LOCATE 7,3 :INPUT"X=";X :POLESGEN(I,1)=X
130   LOCATE 8,3 :INPUT"Y=";Y :POLESGEN(I,2)=Y
140   FOR K=6 TO 9 :LOCATE K,3 :PRINT"           	"; :NEXT K
145   IF X>XMAX THEN XMAX=X
150   IF X<XMIN THEN XMIN=X
155   IF Y>YMAX THEN YMAX=Y
160   IF Y<YMIN THEN YMIN=Y
165  NEXT I
170  DECX=(XMIN+XMAX)/2 :DECY=(YMIN+YMAX)/2
175  LGX=XMAX-XMIN :LGY=YMAX-YMIN
180  IF LGX/LGY>RAPP THEN Q=490/(l.l*LGX) ELSE Q=270/(l.l*LGY)
185 RETURN
199 '
200 'calculs des points de la courbe ....................................
201  CLS :GOSUB 500
203  LOCATE 2,28 :PRINT "CALCUL DE LA COURBE"
205  FOR J=0 TO SEGMG
210   FOR I=0 TO POLESG-1
215    VECT(I,1)=POLESGEN(I,1)
220    VECT(I,2)=POLESGEN(I,2)
230   NEXT I
235   U=J/SEGMG : NBVECT=POLESG-1
240   WHILE NBVECT
245    FOR I=0 TO NBVECT-1
250	AX=VECT(I,1) :AY=VECT(I,2)
255	BX=VECT(I+1,1) :BY=VECT(I+1,2)
257	LINE(AX,AY)-(BX,BY),1
260	CX=AX+((BX-AX)*U) :CY=AY+((BY-AY)*U)
265	VECT(I,1)=CX :VECT(I,2)=CY
267	PSET(CX,CY),5
270    NEXT I
275    NBVECT=NBVECT-1
280   WEND
285   COURBE(J,1)=CX :COURBE(J,2)=CY
290   PSET(CX,CY)
295  NEXT J
298 RETURN
299 '
400 'dessin courbe ......................................................
410  FOR J=0 TO SEGMG 
420   IF J THEN LINE-(COURBE(J,1),COURBE(J,2)) 
           ELSE PSET(COURBE(J,1),COURBE(J,2)) 
430  NEXT 
450 RETURN 
499 ' 
500 'window .............................................................
510  WINDOW ((WXl+D)/Q+DECX,(WYl+H)/Q+DECY)((WX2+D)/Q+DECX,(WY2+H)/Q+DECY) 
520 RETURN 
549 ' 
550 'fin ................................................................
555  FLG=1 
560  WHILE FLG
570   LOCATE 22,20 :PRINT"	"
575   LOCATE 22,65 :PRINT"	" :LOCATE 22,65 :PRINT"Ech:"Q
580   LOCATE 22,2  :INPUT "Zoom, [D|G|H|B|C|F] ",R$
590   IF VAL(R$)<>0 THEN Q=VAL(R$)      :FLG=0 
600   IF R$="d" OR R$="D" THEN D=D+49   :FLG=0 
610   IF R$="g" OR R$="G" THEN D=D-49   :FLG=0 
620   IF R$="h" OR R$="H" THEN H=H+38   :FLG=0 
630   IF R$="b" OR R$="B" THEN H=H-38   :FLG=0 
632   IF R$="c" OR R$="C" THEN H=0 :D=0 :FLG=0 
635   IF R$="f" OR R$="F" THEN FIN=1    :FLG=0 
640   IF FLG=0 THEN CLS 
650  WEND 
655 RETURN 
699 ' 
900 'init ...............................................................
905  SCREEN 9 :CLS 
910  Q=1 :DECX=0 :DECY=0 :RAPP=490/270
915  XMAX=-9999 :XMIN=9999 
920  YMAW=-9999 :YMIN=9999 
925  WX1=-255 :WX2=640-255 :WY1=145*1.4 :WY2=(145-350)*1.4 
930  LINE(510,10)-(630,44),2,B 
935  LINE(510,50)-(630,280),2,B 
940  VIEW SCREEN(10,10)-(500,280),,1 
945  GOSUB 500 
950  LOCATE 2,68 :PRINT" COURBES" 
955  LOCATE 3,68 :PRINT"DE BEZIER" 
960  LOCATE 3,3  :INPUT "nombre de pôles du polygone:";POLESG 
965  LOCATE 4,3  :INPUT "nombre de segments:";SEGMG 
970  DIM POLESGEN(POLESG,3)     'PolesGénérateurs(nbpôles,XYZ) 
975  DIM COURBE(SEGMG,3)        'Courbe(nombre,n segm,XYZ) 
980  DIM VECT(POLESG,3) 
985 RETURN
999'