Практика программирования (Бейсик, Си, Паскаль)

       

Окружности, эллипсы и дуги


В системе 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 в градусах, которые могут быть как положительными, так и отрицательными. Второе отличие связано с явным заданием обеих полуосей эллипса гх и гу.




Содержание раздела