Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
      1. Многоугольники

Вы можете создать многоугольники, задаваемого массива точек PhPoint_t. Если Вы используете Pg_CLOSED как часть аргумента flags, последняя точка автоматически соединяется с первой, замыкая многоугольник. Вы можете также задавать точки относительно начальной – первой точки (используя Pg_POLY_RELATIVE).

Следующий пример рисует синий шестиугольник с белым контуром:

void DrawFillStrokePoly( void ) {

PhPoint_t start_point = { 0, 0 };

int num_points = 6;

PhPoint_t points[6] = {

{ 32,21 }, { 50,30 }, { 50,50 },

{ 32,59 }, { 15,50 }, { 15,30 }

};

PgSetFillColor( Pg_BLUE );

PgSetStrokeColor( Pg_WHITE );

PgDrawPolygon( points, num_points, start_point, Pg_DRAW_FILL_STROKE | Pg_CLOSED );

}

          1. Перекрытие многоугольников

Многоугольники, которые чем-то перекрываются, заполняются с использованием так называемого правила чёт-нечет: если область пересекается чётное количество раз, она не заполнена. Чтобы понять это, давайте нарисуем горизонтальную линию, пересекающую многоугольник. Когда Вы идёте вдоль этой линии и пересекаете первую линию, Вы оказываетесь внутри многоугольника; пересекая вторую линию – выходите наружу. В качестве примера рассмотрим простой многоугольник:

              1. Заполнение простого многоугольника

Это правило можно расширить на более сложные многоугольники:

  • Когда Вы пересекаете нечётное число линий, Вы находитесь внутри многоугольника, так что область заполнена.

  • Когда Вы пересекаете чётное число линий, Вы находитесь вне многоугольника, так что область не заполнена.

              1. Заполнение перекрывающися многоугольников

 Правило чёт-нечет применимо и к функции PgDrawPoligon() и к PgDrawPoligonmx().

      1. Дуги, круги, хорды и сектора

Функция PgDrawArd() может использоваться для рисования:

  • дуг

  • кругов

  • эллипсов

  • эллиптических дуг

  • сегментов

  • секторов

Чтобы нарисовать эллипс, можно также вызвать функцию PgDrawEllipse(). Начальный и конечный углы сегмента дуги задаются в бинарных градусах (bi-grads) – полный круг соответствует 65536 бинарным градусам (0х10000).

Чтобы нарисовать полный круг или эллипс, задайте одно и то же значение в бинарных градусах для начальнго и конечного углов. Например:

void DrawFullCurves( void ) {

PhPoint_t circle_center = { 150, 150 }, ellipse_center = { 150, 300 };

PhPoint_t circle_radii = { 100, 100 }, ellipse_radii = { 100, 50 };

/* Рисование белого, незаполненного круга. */

PgSetStrokeColor( Pg_WHITE );

PgDrawArc( &circle_center, &circle_radii, 0, 0, Pg_DRAW_STROKE | Pg_ARC );

/* Рисование чёрного эллипса с белым контуром. */

PgSetFillColor( Pg_BLACK );

PgDrawArc( &ellipse_center, &ellipse_radii, 0, 0, Pg_DRAW_FILL_STROKE | Pg_ARC );

}

Чтобы нарисовать сегмент (кривую, у которой крайние точки соединены прямой линией), добавьте к параметру flags значение Pg_ARC_CHORD. Например:

void DrawChord( void ) {

PhPoint_t center = { 150, 150 };

PhPoint_t radii = { 100, 50 };

/* Рисование чёрного эллиптического сегмента с белым контуром.

Дуга рисуется от 0 градусов до 45градусов (0x2000 биградусов). */

PgSetStrokeColor( Pg_WHITE );

PgSetFillColor( Pg_BLACK );

PgDrawArc( &center, &radii, 0, 0x2000, Pg_DRAW_FILL_STROKE | Pg_ARC_CHORD );

}

Сходным образом, чтобы нарисовать сектор или дугу, добавьте к flags значения Pg_ARC_PIE или Pg_ARC. Например:

void DrawPieCurve( void ) {

PhPoint_t pie_center = { 150, 150 },

arc_center = { 150, 300 };

PhPoint_t pie_radii = { 100, 50 },

arc_radii = { 50, 100 };

/* Рисование чёрного эллиптического сектора с белым контуром. */

PgSetStrokeColor( Pg_WHITE );

PgSetFillColor( Pg_BLACK );

PgDrawArc( &pie_center, &pie_radii, 0, 0x2000, Pg_DRAW_FILL_STROKE | Pg_ARC_PIE );

/* Рисование чёрной дуги. */

PgSetStrokeColor( Pg_BLACK );

PgDrawArc( &arc_center, &arc_radii, 0, 0x2000, Pg_DRAW_STROKE | Pg_ARC );

}

              1. Заполненные и очерченные дуги

Соседние файлы в папке Литература