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.