-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas05-02.txt
543 lines (482 loc) · 35.2 KB
/
bas05-02.txt
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
V.4.4. О п е р а т о р PSET . О п е р а т о р PRESET
Первая форма записи оператора PSET:
I. PSET[@](Х,У)[,С]
где: PSET("to SET Point"-"установить точку") - служебное слово;
X - арифметическое выражение, целая часть значения которого опреде-
ляет x-координату точки (номер колонки);
Y - арифметическое выражение, целая часть значения которого опреде-
ляет y-координату точки (номер строки);
С - арифметическое выражение, целая часть значения которого задает
код цвета точки;
@ - необязательный элемент оператора PSET, никак не влияющий на его
выполнение; он используется только для совместимости с другими версиями
языка BASIC.
При попытке использовать оператор PSET в символьных экранах SCREEN 0 и
SCREEN 1, компьютер сообщает об ошибке:
"Illegal function call" .
Целые части значений X и Y должны принадлежать отрезку [-32768,32767],
а целая часть значения C должна находиться на отрезке [0,15];по умолчанию
(отсутствие параметра C) используется текущий цвет изображения.Если точка
(X,Y) находится "вне" графического экрана SCREEN2, (вне диапазона 0≤X≤255,
0≤Y≤191), то оператор не оказывает никакого действия. Поэтому, чтобы быть
уверенным, что изображение точки строится в пределах экрана, желательно
включать в программу проверку условий: 0≤X≤255, 0≤Y≤191.
В результате выполнения оператора PSET графический курсор устанавлива-
ется в точку, определяемую параметрами (X,Y),и раскрашивает ее цветом, оп-
ределяемым значением параметра С.
Обратим Ваше внимание на то, что оператор PSET может привести в режиме
SCREEN2 к и з м е н е н и ю ц в е т а до 8 расположенных рядом точек
в строке, определяемой значением Y. Например:
10 INPUT A:COLOR 1,15,8:SCREEN 2: 'Исследуйте:80≤A≤87,96≤A≤103
20 CIRCLE(90,90),7,11:PAINT STEP(0,0),11:PSET(A,90),8
30 GOTO 30
Дело в том, что каждая из 192 линий экрана SCREEN 2 разбивается на 32
8-ми точечных сегмента (8-ми пиксельных сегмента). Каждому сегменту "при-
сваивается" только д в а цвета - цвет изображения и цвет фона. Отобража-
емый на экране пиксель имеет цвет изображения, тогда как отсутствие пиксе-
ля означает появление пикселя, имеющего цвет фона. Следовательно,для вось-
мипиксельного сегмента возможно наличие всего д в у х цветов.
Для режима SCREEN3 каждый блок точек 4╳4 создает на экране изображение
одной"точки", поэтому любое изменение цвета"маленькой" точки в этом блоке
вызывает и з м е н е н и е ц в е т а всего блока.
Итак, вследствие неизбежного побочного эффекта "перетекания цветов",Вы
должны быть очень аккуратны, применяя оператор PSET, так как при этом лег-
ко можно изменить цвет уже нарисованной части изображения!
П р и м е р ы:
─────────────
1) построение графика параболы Y²=50·X, X≥0, Y≥0.
10 COLOR 1,15,8:SCREEN 2
20 FOR X=0 TO 255:PSET(X,191-SQR(50*X)):NEXT
30 GOTO 30
А теперь исключите оператор GOTO30. Обнаружили разницу при запуске?...
Думаем, что да! Запомните этот прием!
2) Ok
10 COLOR 1,15,8:SCREEN2:FOR T=0 TO 6.28*4 STEP .05:X=3*SIN(2*T):
Y=3*COS(3*T):PSET(44+10*X,96-15*Y),1
55 U=30*COS(T)-30/5*COS(5*T):V=30*SIN(T)-30/5*SIN(5*T)
56 PSET(125+U,60+V),1:Z=T*COS(T):H=4*T*SIN(T):PSET(205+Z,96+H),1
:E=25*COS(T)+25/2*COS(3*T):G=25*SIN(T)-25/2*SIN(3*T):PSET(125+E,
130+G):NEXT
80 GOTO 80'Замените эту строку на 80 A$=INPUT$(1) !
3) NEW
Ok
10 INPUT A,B,K,N:COLOR 1,15,8:SCREEN2
20 FOR T=0 TO 6.28 STEP.05:R=A*(1+COS(K*T)^N)+B*SIN(K*T)^N:X=R*C
OS(T):Y=R*SIN(T):PSET(128+X,96+Y):NEXT
40 GOTO 40 'Замените эту строку на 40 A$=INPUT$(1) !
II. Вторая форма записи оператора PSET:
PSET[@]STEP(X,Y)[,C]
где: 1) STEP ("step"-"шаг") - служебное слово;
2) @,X,Y,C имеют тот же смысл, что и в пункте α).
Элемент конструкции STEP(X,Y) задает смещение координат изображаемой
точки на X и Y соответственно относительно т е к у щ е й позиции графи-
ческого курсора. Например:
10 COLOR 0,15,8:SCREEN 2:PSET(20,20):PSET STEP(5,7):GOTO 10
В результате работы данного фрагмента программы на экране дисплея бу-
дут изображены две красные точки: (20,20) и (25,27).
П р и м е р ы:
─────────────
1) построение крошечных точек с разной раскраской.
10 COLOR 1,15,8:SCREEN3:PSET(45,95) 'Попробуйте режим
30 FOR X=0 TO 15:PSET STEP(10,0),X:NEXT ' SCREEN2 !
60 GOTO60 'Подумайте, почему в режиме SCREEN3 расстояние между
точками различно?!
2) построение графика функции y=0.77x+14·sin(x/6),-128≤x≤127 (объяс-
ните назначение операторов PSET(0,95) и PSET(128,0)).
10 COLOR 1,15,8:SCREEN 2:PSET(0,95):FOR J=0 TO 255:PSET STEP(1,0
),1:NEXT:PSET(128,0):FOR J=1 TO 191:PSET STEP(0,1),1:NEXT:FOR I=
-128 TO 127:PSET(I+128,191/2-.77*I-14*SIN(I/6)),1:NEXT:B$=INPUT$
(1)
3) 10 CLS:INPUT"Введите Р (от 0 до 4) 5'Построение функциональных узоров
14.4)";Р 10 DEF FNF(X,Y)=SQR(X^2+Y^2)
20 COLOR 15,1,15:SCREEN3:E=0 20 SCREEN 3
30 FOR Y=1 TO 191 STEP4:FOR X=1 30 FOR X=-.375 TO .375 STEP 1/64
TO 255 STEP4:D=INT(E):PSET(X,Y), 40 FOR Y=-.375 TO .375 STEP 1/64
D:E=E+P 50 R=INT(200*FNF(X,Y))
40 IF E>14 THEN E=0 60 C=R-2*INT(R/2)
50 NEXT X,Y 70 PSET(128+256*X,96+256*Y),C*11+4
60 GOTO 60 80 NEXT Y,X
90 GOTO 90
Оператор PRESET ("Point RESET"-"стирание точки") представим двумя син-
таксическими конструкциями:
PRESET[@](X,Y)[,C]
PRESET[@]STEP(X,Y)[,C]
Здесь элементы @, (X,Y), STEP(X,Y) и С имеют тот же смысл,что и в опе-
раторе PSET, oднако,при выполнении оператора PRESET без параметра С точка
с координатами (X,Y) "стирается", т.е. приобретает цвет фона.Если же пара-
метр С присутствует, то действия операторов PRESET и PSET идентичны.
П р и м е р. Отрезок, "бегущий" по экрану!
─────────── 10 INPUT"Длина отрезка(≤45)";A:COLOR 1,15,8:SCREEN 2
20 FOR K=A TO 300:PSET(K,95):PRESET(K-A,95):NEXT:GOTO 20
5.4.5. О п е р а т о р LINE
У точек бедных крошек,
Ни ручек нет, ни ножек.
Как же они, не пойму я,
Сцепляются в прямую?
Дж.А.Линдон
Оператор LINE позволяет изображать отрезки прямых и прямоугольники с
одновременной раскраской их требуемым цветом.
Синтаксис оператора LINE:
LINE [@][[STEP](X,Y)]-[STEP](Z,T),[C][,B(или BF)]
где: LINE("line"-"линия") - служебное слово;
сочетания параметров (X,Y)-(Z,T) или STEP(X,Y)-STEP(Z,T) , или
(X,Y)-STEP(Z,T), или STEP(X,Y)-(Z,T) , или -(Z,T) , или -STEP(Z,T) за-
дают на экране две точки: α и β. Если первый из элементов отсутствует, то
в качестве соответствующей точки берется та,в которой находится графичес-
кий курсор (берутся координаты точки,использованной в последнем выполнен-
ном графическом операторе). Координаты точек α и β должны принадлежать от-
резку [-32768,32767],однако,в режимах SCREEN2 и SCREEN3 на экране дисплея
отображаются только точки с координатами X oт 0 до 255 и Y от 0 до 191;
С - арифметическое выражение, целая часть значения которого задает
код цвета линии (0≤С≤15);
В ("Box"-"прямоугольник") - параметр, определяющий рисование пря-
моугольника (с заданием противоположных вершин) цветом С без закраски его
внутренней части;
BF("Box Fill"-"заполненный прямоугольник") - параметр, определяющий
рисование прямоугольника с одновременной закраской его внутренней части
цветом, код которого определяется значением C;
@ - необязательный элемент оператора LINE, никак не влияющий на его
выполнение.
Обращение к оператору LINE в режимах SCREEN0 или SCREEN1, вызовет со-
общение об ошибке: "Illegal function call".
Если параметр C отсутствует,а параметр B (или BF) присутствует,то перед
ним обязательно ставятся д в е запятые. В этом случае рисунок имеет цвет,
заданный ранее оператором COLOR.
Рассмотрим три случая:
1. Параметр B (или BF) отсутствует.
В этом случае компьютер проводит на экране линию, имеющую цвет C и со-
единяющую точки α и β.
Примеры записи оператора:
LINE(3,17)-(10,20),4 LINE STEP(3,20)-(21,23)
LINE -(0,15),1 LINE STEP(10,20)-STEP(15,60)
П р и м е р ы:
─────────────
1) NEW
Ok
10 SCREEN 2:FOR X=-.5 TO .5 STEP.01:Y=1/(X^2-.05):K=K+2
40 LINE(K+25,Y+100)-(127,150):NEXT:A$=INPUT$(1)
2) NEW
Ok
10 K=8*ATN(1):SCREEN 2:PSET(128,96+80*COS(10))
20 FOR I=0TO K*6+.05 STEP.2:X=100*SIN(I):Y=80*COS(I+10)
40 LINE-(128+X,96+Y),1,B:NEXT:A$=INPUT$(1)
3) NEW
Ok
10 SCREEN2:XM=256:YM=191:XC=XM/2:YC=YM/2
50 FOR X=0 TO XM:C=INT(RND(1)*16):LINE (XC,YC)-(X,0),C
80 NEXT X:FOR Y=0 TO YM:C=INT(RND(1)*16):LINE(XC,YC)-(XM,Y),C:NEXTY
140 FOR X=XM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(X,YM),C:NEXT
X:FOR Y=YM TO 0 STEP-1:C=INT(RND(1)*16):LINE(XC,YC)-(0,Y),C:NEXTY
220 GOTO 220
4) NEW
Ok
10'Построение линейчатых поверхностей ("ruled surface")
20 INPUT"i0,i1,h";I0,I1,H:INPUT"j0,j1";J0,J1
45 COLOR1,15,1:SCREEN2
50 'Лист Мебиуса.Начальные данные:{0,6.28,.0628,-20,20}
60 DEFFNX(U,V)=COS(U)*(50+V*COS(U)):DEFFNY(U,V)=SIN(U)*(50+V*COS(U)
):DEFFNZ(U,V)=V*SIN(U)
90 'Геликоид. Начальные данные:{-.7,6,.12,-45,45}
100 'DEFFNX(U,V)=V*COS(U):DEFFNY(U,V)=V*SIN(U)
120 'DEFFNZ(U,V)=25*U-80
300 FOR I=I0 TO I1 STEP H
310 J=J0:GOSUB 370:A=X:B=Y:I=I+H:GOSUB370:K=X:D=Y:I=I-H
320 J=J1:GOSUB 370:A1=X:B1=Y:I=I+H:GOSUB370:K1=X:D1=Y:I=I-H:LINE(A,
B)-(A1,B1):LINE(A,B)-(K,D):LINE(A1,B1)-(K1,D1):NEXTI:A$=INPUT$(1):E
ND
370 X=120+.7*(FNX(I,J)-FNY(I,J)):Y=94-(.7*(FNX(I,J)+FNY(I,J))+.7*FN
Z(I,J)):RETURN '──▶
5) NEW
Ok
11 COLOR 15,4,4:SCREEN2:PI=3.14159:FORB=10TO 50 STEP 10
25 A=B/2:FOR D=0 TO360 STEP4:FI=2*PI*D/360:R=A*(1+COS(5*FI))+B*SIN(
5*FI)^2:X=R*COS(FI)+256/2:Y=R*SIN(FI)+191/2
85 IF D=0THEN LINE(X,Y)-(X+1,Y+1),15 ELSE LINE-(X,Y),15
90 NEXT:NEXT:PAINT(4,104),15:A$=INPUT$(1)
Используя в операторе LINE пропуск координат первой точки ((X,Y) или
STEP(X,Y)), можно "подхватить"линию с точки, где "остановился" предыдущий
оператор, т.е.,например, связать прямые линии между собой в ломаную линию.
Более того, прежде чем продолжить рисовать, программа может выполнить ка-
кие-либо другие действия. Компьютер "не забудет",в какой точке процесс ри-
сования был приостановлен! Если же в операторе указан параметр STEP, то
заданные в круглых скобках координаты прибавляются к координатам послед-
ней упомянутой позиции графического курсора.
6) NEW
Ok
10 SCREEN2:PSET(115,95):GOSUB 100:END
100 RESTORE 1000:READ N:FOR I=1 TO N:READ X,Y
110 LINE -STEP(X,Y):NEXT:A$=INPUT$(1):END
1000 DATA 6,35,0,23,-35,-23,-35,-35,0,-23,35,22,35
"Относительный"вариант синтаксиса оператора LINE (с использованием па-
раметра STEP) позволяет рисовать фигуры в "относительных" координатах. За-
тем можно легко помещать один и тот же объект в различные места экрана,
указывая лишь его "начальную" точку!
7) Программа рисования пятиугольника, разделенного на сегменты. Заданы:
начальная точка (XB,YB), масштаб (S) и цвет (C).
NEW
Ok
10 INPUT XB,YB,S,C:GOSUB 120'──▶
30 GOTO 30
120 RESTORE 170:SCREEN 2:COLOR 9:FOR X=1 TO 5:READ A,B
130 LINE (XB,YB)-STEP(A*S,B*S),C:NEXT:RESTORE 170:FOR X=1 TO 5:READ
A,B:LINE-(A*S+XB,B*S+YB),C:NEXT:RETURN'──▶
170 DATA 10,2,6,10,-6,10,-10,-2,0,-10
Подумайте, какие изменения нужно внести в программу, чтобы на экране
компьютер изобразил "почти" правильный пятиугольник.
8) 5 INPUT "Введите Р=2,5,7,10,13";P:SCREEN2
10 RAD=60
20 FOR ANG%=0 TO 360 STEP P
30 RNG=ANG%*6.28/360:RG2=(ANG%+150)*6.28/360
50 X1=RAD*COS(RNG)+110:Y1=RAD*SIN(RNG)+90
70 X2=RAD*COS(RG2)+110:Y2=RAD*SIN(RG2)+90
85 LINE(X1,Y1)-(X2,Y2)
90 NEXT ANG%
100 GOTO 100
9) 10 SCREEN 2:N=18:DIM X(N),Y(N):R=99:DT=2*3.1415/N:T=0
70 FOR I=1 TO N:T=T+DT:X(I)=160+R*COS(T):Y(I)=100-R*SIN(T)
100 NEXT
110 FOR I=1 TO N-1:FOR J=I+1 TO N:LINE (X(I),Y(I))-(X(J),Y(J))
140 NEXT:NEXT
160 GOTO 160
10) 170 DIM X(3),Y(3),XD(3),YD(3)
180 SCREEN2:R=150:XL=100:YU=50:N=60
220 X(0)=XL:X(1)=XL+R:X(2)=XL+R:X(3)=XL
230 Y(0)=YU+R:Y(1)=YU+R:Y(2)=YU:Y(3)=YU
240 SMU=.08:RMU=1-SMU
250 FOR I=1 TO N:FOR J=0 TO 3
260 XD(J)=RMU*X(J)+SMU*X((J+1)MOD4)
270 YD(J)=RMU*Y(J)+SMU*Y((J+1)MOD4)
280 NEXT
290 FOR J=0 TO 3:LINE (X(J),Y(J))-(X((J+1)MOD4),Y((J+1)MOD4))
310 NEXT
320 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
360 GOTO 360
11) 10 DIM X(3),Y(3),XD(3),YD(3):COLOR 1,15:SCREEN2
30 R=60:XL=10:YU=17
50 FOR K=1 TO 2:FOR L=1 TO 3
70 X(0)=XL:X(1)=XL+R:X(2)=XL+R:X(3)=XL
90 IF KMOD2=0 AND LMOD2=0 THEN 130 '──▶
100 IF KMOD2=1 AND LMOD2=1 THEN 130 '──▶
110 Y(0)=YU+R:Y(1)=YU+R:Y(2)=YU:Y(3)=YU
120 GOTO 140 '──▶
130 Y(0)=YU :Y(1)=YU::Y(2)=YU+R:Y(3)=YU+R
140 SMU=.08:RMU=1-SMU
160 FOR I=1 TO 21:FOR J=0 TO 3
180 XD(J)=RMU*X(J)+SMU*X((J+1)MOD4)
190 YD(J)=RMU*Y(J)+SMU*Y((J+1)MOD4)
200 NEXT
210 FOR J=0 TO 3
220 LINE(X(J),Y(J))-(X((J+1)MOD 4),Y((J+1)MOD4))
230 NEXT
240 FOR J=0 TO 3:X(J)=XD(J):Y(J)=YD(J):NEXT:NEXT
290 XL=XL+R:NEXT:XL=10:YU=YU+R:NEXT
330 GOTO 330
12) И наконец, о "перетекании цветов". Сравните результаты работы двух
программ:
10 SCREEN 2 10 SCREEN 2
20 LINE(9,50)-(14,50),15 20 LINE(8,50)-(15,50)
30 LINE(12,40)-(12,60),1 30 LINE(12,40)-(12,60),1
40 GOTO 40 40 GOTO 40
2. Параметр В есть.
В этом случае компьютер рисует прямоугольник со сторонами цвета C, па-
раллельными "экранным" осям координат,причем,если указаны две точки α и β,
то они представляют собой противоположные вершины изображаемого прямоуго-
льника. Внутренняя часть прямоугольника не закрашивается. Если же указана
только вторая точка (не забудьте указать перед ней тире !), то в качестве
первой используется точка,изображенная или упомянутая в Вашей программе
последней.
13) α) 10 COLOR 1,11:SCREEN 2 β) 10 COLOR 1,11:SCREEN 2
20 LINE(8,10)-STEP(7,8),15,B 20 LINE(8,20)-STEP(3,8),15,B
30 LINE(16,10)-STEP(7,8),1,B 30 LINE(12,20)-STEP(11,8),1,B
40 GOTO 40 40 GOTO 40
γ) 10 COLOR 1,11:SCREEN 2
20 LINE(8,30)-STEP(11,8),15,B
30 LINE(20,30)-STEP(3,8),1,B
40 GOTO 40
В ы в о д: данные примеры совсем не означают, что невозможно создать
многоцветные рисунки в режиме SCREEN 2. Однако, расположение элементов ри-
сунка должно быть тщательно выверено!
При возникновении "конфликтов" между цветом линий и их расположением,
параметр BF действует точно так же, как и оператор PSET: он изображает
все "задействованные" пиксели, переустанавливает цвет изображения сегмен-
та, тогда как цвет фона остается неизменным.Чтобы проверить это,вернитесь
к программе, приведенной выше и замените параметр B на BF.
3. Параметр BF есть.
Компьютер, как и в случае β,изображает на экране дисплея прямоугольник,
но внутренняя часть его закрашивается цветом С.
П р и м е р ы [4]:
─────────────
14) 5 'Смещенные прямоугольники 15) 5' Вложенные прямоугольники
10 COLOR 1,15,8:SCREEN2 10 COLOR 1,15,8:SCREEN2
20 FOR X=0 TO 15 20 FOR X=0 TO 15
30 LINE(40+7*X,30+5*X)-(130+ 30 LINE(2+8*X,6+6*X)-(254-
7*X,90+5*X),15-X,BF:NEXT 8*X,185-6*X),15-X,BF:NEXT
50 GOTO 50 40 GOTO 40
16) 5 'Прямоугольники разных цветов
10 COLOR 1,15,8:SCREEN2:PSET(-4,160)
20 FOR X=0 TO15:LINE STEP(8,-130)-STEP(8,130),X,BF:NEXT
50 GOTO 50
V.4.6. О п е р а т о р CIRCLE
"Noli turbare CIRCilos meos!", - по преданию, Архимед
встретил этими словами римского солдата-завоевателя,
покушавшегося на его жизнь.
С помощью этого оператора компьютер изображает окружности,эллипсы или
их дуги (точнее, ту их часть, которая "умещается"на экране дисплея).
Синтаксис оператора CIRCLE:
CIRCLE [@][STEP](X,Y),R,[C],[α],[β][,γ]
где: CIRCLE("circle"-"круг,окружность") - служебное слово;
@ - необязательный элемент оператора CIRCLE, никак не влияющий на
его выполнение;
X - арифметическое выражение, целая часть значения которого задает
координату центра окружности (эллипса) по горизонтали; Y - арифметическое
выражение,целая часть значения которого задает координату центра окружнос-
ти (эллипса) по вертикали, значения X и Y должны принадлежать отрезку
[-32768,32767].
Отметим, что центр окружности (эллипса) (X,Y) может быть расположен
в л ю б о й точке координатной плоскости (Вы,конечно, помните, что на эк-
ране будут изображены только те точки,координаты которых лежат в пределах
0≤X≤255 и 0≤Y≤191, причем начало координат находится в левом верхнем углу
экрана).
Далее,если указан параметр STEP,то координаты центра вычисляются путем
сложения координат, указанных после служебного слова STEP с последними
упомянутыми координатами графического курсора (о т н о с и т е л ь н о е
задание координат центра);
R - арифметическое выражение, целая часть значения которого должна
принадлежать отрезку [-32768,32767];
C - арифметическое выражение, целая часть значения которого принад-
лежит [0,15] и определяет код цвета изображения;
α - арифметическое выражение,значением которого является начало дуги
окружности в радианах (по умолчанию α=0);
β - арифметическое выражение, значением которого является конец дуги
окружности в радианах (по умолчанию с одинарной точностью β=2·π=6.28319).
Важно отметить,что -6.28319≤α,β≤6.28319,причем, если значение α меньше
значения β, то дуга окружности (эллипса) проводится против часовой стрел-
ки,а если первое значение больше второго, то - по часовой стрелке!
У компьютера "школьное"представление об окружности:поворот от направле-
ния оси OX против часовой стрелки на прямой угол равен π/2 радиан, а пол-
ный поворот составляет 2π радиан.
Заметим, что если любой из параметров α,β является отрицательным,то ис-
пользуется его абсолютное значение; при этом соответствующий конец дуги
соединяется с центром линией радиуса (это необходимо при построении сек-
торных диаграмм); к сожалению компьютер "не различает" значения парамет-
ров α и β,равные (-0) и 0, однако его можно "обмануть",если вместо -0 ука-
зать, например, -0.001;
γ - арифметическое выражение, значение которого задает коэффициент
"сжатия" окружности; если значение параметра γ≠1 (по умолчанию γ=1), то
компьютер изображает эллипс; так, например,при γ=2 будет изображен эллипс
с отношением вертикальной и горизонтальной осей равным 2 (величина верти-
кальной оси равна 2R); ориентация эллипса всегда либо горизонтальная, ли-
бо вертикальная; если окружность на экране оказывается чуть "сплюснутой",
то выберите параметр γ в полуинтервале (1,1.33] (ибо 256/192≈1.33).
Величина параметра R определяет:
a) радиус окружности, если γ=1;
b) вертикальную полуось эллипса, если γ>1;
c) горизонтальную полуось эллипса, если γ<1.
Отметим, что любой необязательный параметр (STEP,C,α,β,γ) может быть
опущен - однако, соответствующие запятые в записи оператора должны указы-
вать на его отсутствие. После последнего параметра запятая не нужна.
В результате выполнения оператора CIRCLE компьютер нарисует эллипс(или
его дугу), после чего графический курсор переместится в точку (R,Y)! Одна-
ко, если далее нужно провести другую линию или поставить точку, то графи-
ческий курсор вначале переместится в точку (X,Y), отмеченную в операторе
CIRCLE, а уже затем компьютер будет считать последней упомянутой точкой
центр окружности.Оператор графики,ссылающийся на последнюю упомянутую точ-
ку, начнет построение из центра окружности.
На примере показано,как использовать эту возможность, чтобы нарисовать
красный леденец на желтой палочке:
10 COLOR 8,15,4:SCREEN2:CIRCLE(126,95),20,8:LINE-(126,140),11
20 GOTO 20'Обратите внимание на эффект "перетекания цветов"!
Ошибки в задании параметров влекут за собой сообщения
"Overflow" или "Syntax error"
("Переполнение") ("Синтаксическая ошибка") .
Если компьютер "долгое" время ничего не рисует, то это скорее всего оз-
начает, что Вы задали слишком большую величину радиуса окружности, и изо-
бражение вышло за рамки экрана дисплея.
П р и м е р ы:
─────────────
1) NEW ┌─────┬─────┬─────┬─────┐
Ok │▧ R ▧│▧ A ▧│▧ B ▧│▧ T ▧│
10 INPUT R,A,B,T:SCREEN2: │─────│─────│─────│─────│
CIRCLE(127,95),R,,A,B,T │ 40 │ 0 │ 3.14│ 1 │
20 GOTO 20 │ 40 │ 3.14│ 6.28│ 1 │
┌─────┬─────┬─────┬─────┐ │ 40 │ 0 │ 6.28│ 1 │
│▧ R ▧│▧ A ▧│▧ B ▧│▧ T ▧│ │ 40 │ -0 │-3.14│ 1 │
│─────│─────│─────│─────│ │ 40 │ -.01│-3.14│ 1 │
│ 40 │-3.14│-0.79│ 1 │ │ 40 │ 0 │ 6.28│ 4 │
│ 40 │-6.00│-6.28│ 1 │ │ 40 │ 0 │ 6.28│ 0.25│
│ 40 │ -.79│-2.36│ .3 │ │ 110 │ 0 │ 3.14│ 1 │
└─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┘
2) NEW
Ok
10 COLOR1,15,4:SCREEN2:LINE(30,10)-(220,180),1,BF
30 CIRCLE(125,95),75,15:FOR R=5TO70STEP5:CIRCLE(125,92.5),R,15:CIRCLE(
125,97.5),R,15:NEXT
100 GOTO 100
3) NEW
Ok
10 COLOR 1,15,8:SCREEN2:PSET(0,125):FOR K=1 TO 25:CIRCLE STEP(10,0),50
,4,0,3.14159:NEXT:PSET(0,160):FOR K=1 TO50:CIRCLE STEP(5,0),30,4:NEXT:
PSET(0,37):FOR K=1TO26 STEP.5:CIRCLE STEP(5,0),K,1:NEXT:A$=INPUT$(1)
4) NEW 5) NEW
Ok Ok
10 COLOR 1,15,8:SCREEN2 10 COLOR 1,15,8:SCREEN2:R=1
20 FOR K=1 TO 100:C=INT(RND 00:P=50
(1)*16):E=RND(1):CIRCLE(128 20 I=I+.1:P=P-.5:R=R-Q:Q=Q+
,95),80,C,,,E:NEXT .1:Y=P*SIN(I):CIRCLE(128,Y+
60 GOTO 60 95),R,,,,.2
60 GOTO 20
6) NEW 7) NEW
Ok Ok
5 '"Ползущий" эллипс 10 COLOR 1,15,8:SCREEN2
10 COLOR 1,15,8:SCREEN2 12 FOR E=5 TO 0 STEP-.099:C
20 PSET(0,95):FOR K=1 TO 25: IRCLE(128,96),80,1,,,E:NEXT
CIRCLE STEP(10,0),50,4,,,.5: 30 GOTO 30
CIRCLE STEP(0,0),50,15,,,.5:
NEXT:GOTO20
8) NEW
Ok
5 '"Вороне где-то бог послал кусочек сыру..."
10 COLOR15,4,4:SCREEN2
15 CIRCLE(90,100),2,15:CIRCLE(100,50),2,15:CIRCLE(60,80),4,15:CIRCLE(7
0,125),3,15:CIRCLE(130,105),2,15
17 CIRCLE(100,140),3,15:CIRCLE(140,57),1,15:CIRCLE(150,80),2,15:CIRCLE
(100,130),3,15:CIRCLE(110,60),4,15
20 CIRCLE(100,100),75,,-1,-1E-03,1.2
30 CIRCLE STEP(10,-5),75,,-1E-03,-1,1.2
50 PAINT(70,100):PAINT(130,80):B$=INPUT$(1)
9) NEW 10) NEW
Ok Ok
10 COLOR 1,15,8:SCREEN2:Q=3 10 COLOR 1,15,8:SCREEN2
20 Q=Q-.05:I=I+Q 20 I=I+0.5
30 CIRCLE(128,95),I 30 CIRCLE(128,95),I
40 IF I>88 THEN 50 ELSE 20 40 IF I>88 THEN50ELSE20
50 GOTO 50 50 GOTO 50
11) NEW
Ok
10 'Моделирование движения подпрыгивающего мяча [14].
20 XM=256:YM=191:X=-10:INPUTH:W=3.14159/40:D=90*3.14159/1
80:K=.01:COLOR15,4,8:SCREEN2
100 KE=1:FORXN=0TOXM-10STEP4:YN=H*SIN(W*XN+D)*EXP(-K*XN)
130 LINE(0,YM)-(XM,YM):YN=YM-ABS(YN)-3:CIRCLE(X,Y),4,4:IF Y>186 THEN
KE=KE+2:CIRCLE(XN+10,YN),4,KE ELSE CIRCLE(XN+10,YN),4,KE
170 X=XN+10:Y=YN:NEXT XN:GOTO 100
12) NEW
Ok
10 COLOR 1,15,8:SCREEN2
20 FOR I=1 TO 13
30 CIRCLE(40+I*15,40+I*10),55-I*3,15-I,0,6.28:PAINT STEP(0,0),15-I
40 NEXT
50 GOTO 50
К сожалению, оператор CIRCLE не позволяет ориентировать эллипс под лю-
бым углом по отношению к горизонтальной оси. Если Вы хотите отобразить та-
кую кривую, воспользуйтесь следующим приемом:
NEW
Ok
10 SCREEN2:PI=4*ATN(1)
30 FOR I=0 TO 200
40 X=120+70*SIN(I*PI/100+PI/4):Y=90-50*COS(I*PI/100)
60 PSET(X,Y)
70 NEXT
80 GOTO 80
Сдвиг PI/4 (45 градусов) в программной строке 40 определяет угол накло-
на большой полуоси эллипса к оси X.