1 '------------- conchoide ---------
2 ' ecrit en GwBasic
3 '......... par Rocanin-Borraz ........
4 '
10 SCREEN 9: CLS
99 '
100 'Saisie des parametres
110 INPUT ; "rp:"; RP: INPUT ; " e:"; E: INPUT " pas"; PAS
120 ECH = 200 / (RP * 2): LIGNES = 360 / PAS
130 DIM CRB(LIGNES, 3)
199 '
200 'Calcul des points de la courbe
210 FOR I = 0 TO 360 STEP PAS
220 J = I / PAS
230 R = E * COS(I * 3.14159 / 180) + RP
240 X = R * COS(I * 3.14159 / 180) - E
250 Y = R * SIN(I * 3.14159 / 180)
260 CRB(J, 1) = X: CRB(J, 2) = Y: CRB(J, 3) = 0
290 NEXT I
299 '
300 'Rotation de la courbe ?
310 INPUT "rotation (non=0 90=1 180=2 270=3)"; AXE$
320 REP = INSTR("0123", AXE$)
340 ON REP GOSUB 1000, 2000, 3000, 4000
399 '
600 'Dessin de la courbe
610 FOR I = 0 TO 360 STEP PAS
620 J = I / PAS
630 X = CRB(J, 1): Y = CRB(J, 2)
640 IF I THEN LINE -(X * ECH + 300, Y * ECH + 150) ELSE PSET (X * ECH + 300, Y * ECH + 150)
690 NEXT I
699 '
700 'Sauvegarde des points pour import DAO
710 INPUT "nom de fichier:"; REP$: NOM$ = REP$ + ".TXT"
720 OPEN "o", #1, NOM$
730 FOR I = 0 TO 360 STEP PAS
740 J = I / PAS
750 PRINT #1, USING "#####.###"; CRB(J, 1);
760 PRINT #1, USING "#####.###"; CRB(J, 2);
770 PRINT #1, CRB(J, 3)
780 NEXT I
790 CLOSE #1
799 '
800 'generer de l'ISO
805 NOM$ = REP$ + ".ISO"
810 INPUT "ligne de depart (valeur):", LIGNE
820 ENTETE$ = "(rp=" + STR$(RP) + " e=" + STR$(E) + " pas=" + STR$(PAS) + " " + AXE$ + ")"
825 OPEN "o", #1, NOM$
830 PRINT #1, ENTETE$
835 FOR I = 0 TO 360 STEP PAS
840 J = I / PAS: LIGNE = LIGNE + 2: LIGNE$ = "N" + MID$(STR$(LIGNE), 2)
845 X = INT(CRB(J, 1) * 1000): X = X / 1000: X$ = STR$(X)
850 IF INSTR(X$, " ") THEN X$ = MID$(X$, 2)
855 Y = INT(CRB(J, 2) * 1000): Y = Y / 1000: Y$ = STR$(Y)
860 IF INSTR(Y$, " ") THEN Y$ = MID$(Y$, 2)
865 PRINT #1, LIGNE$; TAB(7); "G01 X" + X$; TAB(22); "Y" + Y$
870 NEXT I
875 CLOSE #1
899 '
900 'Affichage des valeurs calculees
910 INPUT REP$
920 FOR I = 0 TO 360 STEP PAS
930 J = I / PAS
940 PRINT CRB(J, 1), CRB(J, 2)
950 NEXT I
960 INPUT REP$
970 SCREEN 0
990 '
999 END
1000 'Rotation=0
1010 LINE (200, 150)-(400, 150), 4: LINE (300, 100)-(300, 200), 4
1020 AXE$ = "rotation=0"
1990 RETURN
1999 '
2000 'Rotation de 90
2010 FOR I = 0 TO 360 STEP PAS
2020 J = I / PAS
2030 TEMP = CRB(J, 1): CRB(J, 1) = CRB(J, 2) * -1: CRB(J, 2) = TEMP
2040 NEXT I
2050 LINE (200, 150)-(400, 150), 4: LINE (300, 100)-(300, 200), 4
2060 AXE$ = "rotation=90"
2990 RETURN
2999 '
3000 'Rotation de 180
3010 FOR I = 0 TO 360 STEP PAS
3020 J = I / PAS
3030 CRB(J, 1) = CRB(J, 1) * -1: CRB(J, 2) = CRB(J, 2) * -1
3040 NEXT I
3050 LINE (200, 150)-(400, 150), 4: LINE (300, 100)-(300, 200), 4
3060 AXE$ = "rotation=180"
3990 RETURN
3999 '
4000 'Rotation de 270
4010 FOR I = 0 TO 360 STEP PAS
4020 J = I / PAS
4030 TEMP = CRB(J, 1): CRB(J, 1) = CRB(J, 2): CRB(J, 2) = TEMP * -1
4040 NEXT I
4050 LINE (200, 150)-(400, 150), 4: LINE (300, 100)-(300, 200), 4
4060 AXE$ = "rotation=270"
4990 RETURN
4999 '