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'