1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
CLEAR
'************* ajustement taille ecran ***************
CLS
OPEN "lignes.txt" FOR INPUT AS #1
max = 0
may = 0
DO WHILE NOT EOF(1)
INPUT #1, A$, b, c, d, e, f, g, h, i$
'c=Xdepart d=Ydepart e=Xfin f=Yfin
IF c > max THEN max = c
IF e > max THEN max = e
IF d > may THEN may = d
IF f > may THEN may = f
LOOP
Xmax$ = STR$(max): Xmax$ = LTRIM$(RTRIM$(Xmax$))
Ymax$ = STR$(may): Ymax$ = LTRIM$(RTRIM$(Ymax$))
xwin = CLNG(VAL(Xmax$))
ywin = CLNG(VAL(Ymax$))
CLOSE
'******************************** dessin *************
SCREEN 12: WINDOW (-1, ywin + 2)-(xwin + 2, -1): CLS
DEFSTR A-Z
PI! = 3.141593
OPEN "lignes-2.txt" FOR INPUT AS #1
DO WHILE NOT EOF(1)
INPUT #1, A$, b!, c!, d!, e!, f!, g!, h!, i$
' (A$=A ou L )(b!=pointage)
' (c!=X depart)(d!=Y depart)(e!=X arrivee)(f!=Y arrivee)
' (g!=X centre rayon)(h!=Y centre rayon)(i$= sens du rayon)
Xdepart! = c!: Ydepart! = d!: Xarrivee! = e!: Yarrivee! = f!
Xcentre! = g!: Ycentre! = h!
'''attribution des couleurs au pointage'''
IF b! = 1 THEN 'SENS FIBRES TETE 1
coul! = 14 'couleur jaune
END IF
IF b! = 2 THEN 'SENS TRAVERS TETE 2
coul! = 10 'couleur vert clair
END IF
IF b! = 3 THEN 'SENS 120 degres TETE 3
coul! = 9 'couleur bleu clair
END IF
IF b! = 4 THEN 'SENS trous centrage TETE 4
coul! = 12 'couleur rouge clair
END IF
IF b! = 5 THEN 'SENS 160 degres TETE 5
coul! = 11 'couleur cyan clair
END IF
'envoi ecran
IF A$ = "L" THEN
LINE (c!, d!)-(e!, f!), coul!
END IF
IF A$ = "A" THEN
R! = SQR((Xcentre! - Xarrivee!) ^ 2 + (Ycentre! - Yarrivee!) ^ 2) 'calcul rayon
X! = c! - g!: Y! = d! - h!'coord depart moins coord centre
GOSUB GS01.ANALYSE
X! = e! - g!: Y! = f! - h!'coord fin moins coord centre
Angledebut! = Angle!
GOSUB GS01.ANALYSE
Anglefin! = Angle!
IF Angledebut! = Anglefin! THEN 'controle si un cercle
CIRCLE (g!, h!), R!, coul!
ELSE
CIRCLE (g!, h!), R!, coul!, Angledebut!, Anglefin!
END IF
END IF
LOOP
CLOSE
DO
LOOP WHILE INKEY$ = ""
END
'**********************
GS01.ANALYSE: 'Calcul de l'angle trigo
SELECT CASE X! ' ATN(expression numerique)
CASE IS < 0: ' Calcul direct impossible
SELECT CASE Y!
CASE IS < 0 'QUADRANT 3
X1! = ABS(X!)
Sinus1! = Y! / X1!
Cosinus1! = X1! / Y!
Tangente1! = Sinus! / Cosinus1!
Angle1! = ATN(Tangente1!)
Angle! = PI! + ABS(Angle1!)
CASE IS = 0 ' Ligne des abscisses, a gauche
Angle! = PI!
CASE IS > 0 ' QUADRANT 2
X1! = ABS(X!)
Y1! = ABS(Y!)
Sinus1! = Y1! / X1!
Cosinus1! = X1! / Y1!
Tangente1! = Sinus1! / Cosinus1!
Angle1! = ATN(Tangente1!)
Angle! = PI! - ABS(Angle1!)
END SELECT
CASE 0
SELECT CASE Y!
CASE IS < 0 ' Ligne des ordonnees en bas
Angle! = PI! * 6 / 4
CASE IS = 0 ' A l'intersection lignes abscisses et ordonnees
' IMPOSSIBLE
CASE IS > 0 ' Ligne des ordonnees, en haut
Angle! = PI! / 2
END SELECT
CASE IS > 0
SELECT CASE Y!
CASE IS < 0 ' QUADRANT 4
Sinus! = Y! / X!
Cosinus! = X! / Y!
Tangente! = Sinus! / Cosinus!
Angle! = ATN(Tangente!)
Angle! = 2 * PI! - Angle!
CASE IS = 0 ' Ligne des abscisses, a droite
Angle! = 0
CASE IS > 0 ' QUADRANT 1
Sinus! = Y! / X!
Cosinus! = X! / Y!
Tangente! = Sinus! / Cosinus!
Angle! = ATN(Tangente!)
END SELECT
END SELECT
RETURN