Окружности, эллипсы и дуги
В системе QBasic полные окружности, эллипсы, их дуги или соответствующие сектора воспроизводятся с помощью одного и того же оператора
CIRCLE:
CIRCLE (x,y),R [,c] : ' Полная окружность
CIRCLE (x,у),R,[с],al,a2 : ' Дуга окружности
CIRCLE (x,y),R,[с],-al,-a2 : ' Круговой сектор
CIRCLE (x,y),R,[с],,,k : ' Полный эллипс
CIRCLE (x,y),R,[с],al,a2,k : ' Дуга эллипса
CIRCLE (x,y),R,[с],-al,-a2,k : ' Эллиптический сектор
Координаты центра могут быть заданы как абсолютными, так и относительными (CIRCLE STEP(х,у)...) значениями. Для окружности R задает радиус, а для эллипса R и k участвуют в определении полуоси а (вдоль оси х) и полуоси b (вдоль оси у). При k<la = RHb = k*R, а При k > 1 а = k * R и
b = R. Проведите компьютерный эксперимент со следующей программой:
Программа 8_06.bas
REM Построение эллипсов SCREEN 12
VIEW (0,0)-(400,400),,1
F0R X=10 T0 390 STEP 10
F0R Y=10 T0 390 STEP 10
LINE (X,10)-(X,390),7: ' построение вертикальных линий сетки
LINE (10,Y)-(390,Y),7: ' построение горизонтальных линий сетки NEXT Y NEXT X
LINE (0,200)- (400,200),14 : ' построение "оси" х
LINE (200,0)-(200,400),14 : ' построение "оси" у
CIRCLE (200,200),120,15,,,4/3 : ' белый эллипс
CIRCLE (200,200),120,14,,,3/4 : ' желтый эллипс
END
В квадрате со стороной 400 пикселов с шагом в 10 пикселов строится серая сетка и по центру зоны вывода проводятся желтые координатные оси. Затем строятся белый и желтый эллипсы с центрами в середине области графики. На этом рисунке можно легко определить размеры полуосей каждого из эллипсов.
В построении дуг принимают участие два угла al и а2, задаваемые в радианах. Их абсолютные значения принадлежат интервалу [0,2хл]. Углы отсчитываются от положительного направления оси х против часовой стрелки. Угол al задает положение начального радиус-вектора, проведенного из центра в начало дуги, а угол а2 — положение конечного радиус-вектора. Вообще говоря, это справедливо для дуг окружности. Для дуг эллипсов углы приходится подбирать, т. к. параметры оператора используются сначала для вычисления точек на дуге окружности, при трансформации которой в дугу эллипса углы начального и конечного радиус-векторов искажаются.
Если углы задаются со знаком минус, то соответствующие концы дуг соединяются с центром, образуя круговой или эллиптический сектор. Такие фигуры могут использоваться для построения круговых диаграмм. Приведенный ниже пример демонстрирует построение дуги и сектора, вписывающихся в один и тот же центральный угол эллипсов разного размера. Углы начального и конечного радиус-векторов заданы в радианах и, соответственно, равны 30 и 60 градусам.
Программа 8_07.bas
RЕМ Построение дуги и сектора эллипса
SCREEN 12
VIEW (0,0)-(400,400)
LINE (0,200)-(400,200),7 :' построение "оси" .х
LINE (200,0)-(200,400),7 :' построение "оси" у
CIRCLE (200,200),120,4,,,.75 :' полный эллипс
CIRCLE (200,200),90,4,,,.75 :' полный эллипс
CIRCLE (200,200),120,15,.5236,1.0472,.75 :' белая дуга
CIRCLE (200,200),90,14,-.5236,-1.0472,.75 :' желтый сектор
END
Четвертый необязательный параметр в операторе CIRCLE задает явный цвет соответствующей фигуры, который может отличаться от цвета переднего плана, установленного по оператору C0L0R.
В BGI-пакете для построения каждой из описанных выше графических фигур используется отдельная процедура:
arc(x,у,a1,a2,r); //дуга окружности
circle(х,у,r); //окружность
ellipse(х,у,al,a2,rх,rу); //дуга эллипса или полный эллипс
В отличие от QBasic положение начального и конечного радиус-векторов здесь задается целочисленными значениями углов al и а.2 в градусах, которые могут быть как положительными, так и отрицательными. Второе отличие связано с явным заданием обеих полуосей эллипса гх и гу.