русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 750; Нарушение авторских прав


Для изображения окружностей используется процедура

Circle( x, у : Integer; Radius : Word )

Здесь (X,Y) — координаты центра окружности, Radius — ее радиус. Результатом ее работы будет окружность, если коэффициент сжатия {427} изображения соответствует принятому BGI‑драйвером для текущего графического режима. В противном случае на экране появится эллипс, вытянутый по вертикали (коэффициент сжатия больше принятого по умолчанию) или по горизонтали (коэффициент меньше принятого).

В модуле Graph представлены процедуры рисования эллипсов, дуг, секторов и процедура, позволяющая рисовать сектор, залитый по заданному шаблону. Все они запрашивают параметры StartAngle и EndAngle, которые обозначают начальный и конечный угол дуги. От какого направления измеряется угол? На рис. 19.12 изображена система графических координат, в которой мы работаем.

Положительное направление оси X (слева направо) принято за 0°, отрицательное направление оси Y — за 90°, т.е. углы отмеряются от положительного направления оси X против часовой стрелки. Все значения этих параметров даются в градусах.

Ниже перечислены процедуры рассматриваемого класса:

1. Рисование дуги радиуса Radius из центра с координатами (X,Y) от угла StartAngle до EndAngle:

Arc( X,Y: Integer; StartAngle, EndAngle, Radius: Word )

При изменении коэффициента сжатия изображения вид выводимых дуг будет отличаться от правильных окружностей.

2. Рисование эллиптической дуги с аналогичными параметрами:

Ellipse( X, Y: Integer; StartAngle, EndAngle, XRadius, YRadius: Word )

где XRadius и YRadius — размеры горизонтальной и вертикальной полуосей соответственно. Как видно из описания процедуры, оси {428} эллипса могут быть только параллельны осям X и Y. Для изображения полного эллипса надо задавать углы 0° и 360°. Значение коэффициента сжатия изображение не влияет на его вид.



Некоторые другие процедуры, изображающие секторы (Sector, PieSlice), а также FillEllipse, выполняют попутно их заливку, поэтому они рассмотрены в разд. 19.5.3 «Заливка областей изображения».

Угловые параметры очень неудобны для нашей системы координат — мы можем определить координаты начала и конца дуг окружности или эллипса не иначе, как только используя известные тригонометрические выражения. Но в подобных вычислениях нет необходимости, поскольку эти координаты все равно известны внутри процедур Arc, Ellips, Sector и PieSlice.

Извлечь концевые координаты дуг позволяет процедура

GetArcCoords( VAR ArcCoords : ArcCoordsType )

Тип ArcCoordsType объявлен в модуле Graph следующим образом:

TYPE

ArcCoordsType = RECORD

X, Y : Integer; { центр }

XStart, Ystart : Integer; { начало }

XEnd, Yend : Integer; { конец }

END;

Рассматриваемая процедура возвращает «итоги» последнего вызова процедуры рисования дуги или сектора. Это может пригодиться в случае, если дуги являются частью какого-либо построения на экране дисплея (рис. 19.13).

USES Graph; { подключен модуль Graph } {$I initgraf.pas} { процедура инициализации } VAR maxx, maxy, radius : Integer; x_right, x_left, y_right, y_left : Integer; ArcCo1, ArcCo2 : ArcCoordsType; BEGIN GrInit; { инициализация графики } maxx := GetMaxX; { разрешение по оси X } maxy := GetMaxY; { разрешение по оси Y } radius := Round(maxy*0.30); { значение радиуса дуг } x_right := Round(maxx*0.75); { центр правой дуги } y_right := Round(maxy*0.25);

Рис. 19.13 {429}

x_left := Round(maxx*0.25); { центр левой дуги } y_left := Round(maxy*0.75); Arc(x_right, y_right, 315, 135, radius); GetArcCoords(ArcCol ); { где концы правой дуги? } Arc( x_left, y_left, 135, 315, radius ); GetArcCoords( ArcCo2 ); { где концы левой дуги? } { Дуги сопрягаются прямыми: } Line(ArcCo1.XStart, ArcCo1.YStart, ArcCo2.XEnd, ArcCo2.YEnd); Line(ArcCo2.XStart, ArcCo2.YStart, ArcCo1.XEnd, ArcCol.YEnd); ReadLn; CloseGraph { закрытие графики } END.

Рис. 19.13 (окончание)



<== предыдущая лекция | следующая лекция ==>
Коэффициент сжатия изображения | Построение прямоугольников и ломаных


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.035 сек.