- Fillpolygon рисование закрашенного многоугольника
- Ломаная PolyLine и замкнутая Polygon
- Процедура PolyLine рисования ломаной линии
- Процедура Polygon рисования многоугольника
- Мгогоугольник в PascalABC
- Многоугольник в PascalABC.Net
- imagefilledpolygon — Рисование закрашенного многоугольника
- Описание
- Список параметров
- Возвращаемые значения
- Примеры
- Урок 24. Графические методы FillRectangle, FillEllipse и FillPolygon
- Справочная информация
- Проект «My FillPolygon»
- Graphics. Draw Polygon Метод
- Определение
- Перегрузки
- DrawPolygon(Pen, PointF[])
- Параметры
- Исключения
- Примеры
- Комментарии
Fillpolygon рисование закрашенного многоугольника
В завершение (по крайней мере этой главы) нам осталось рассмотреть метод FillPolygon. От других закрашиваемых областей многоугольники отличаются тем, что определяющие их линии могут пересекаться и накладываться одна на другую. Это усложняет дело, так как есть два разных способа заливки многоугольников. Существует четыре метода FillPolygon:
Методы FillPolygon класса Graphics
void FillPolygon(Brush brush, Point[] apt) |
void FillPolygon(Brush brush, PointF[] apt) |
void FillPolygon(Brush brush, Point[] apt, FillMode fm) |
void FillPolygon(Brush brush, PointF[] apt, FillMode fm) |
Они во всем похожи на метод DrawPolygon, кроме одного необязательного аргумента. FillMode — это перечисление, определяемое в пространстве имен System.Drawing.Drawing2D. У него всего два возможных значения:
Член | Значение | Комментарий |
Alternate | 0 | Задано по умолчанию, чередует закрашенные и незакрашенные области фигуры |
Winding | 1 | Закрашивает максимально возможное число внутренних областей фигуры |
Режим заливки имеет значение, лишь когда линии, определяющие многоугольник, пересекаются. Он определяет, какие из замкнутых областей будут закрашены, а какие — нет. Если режим заливки в методе FillPolygon не задан, по умолчанию используется FillMode.Alternate. При этом замкнутая область заполняется, только если она отделена от бесконечности нечетным числом границ.
Классический пример — пятиконечная звезда. Ее внутренний пятиугольник закрашивается в режиме Winding, но остается свободным в режиме Alternate.
Первый цикл for определяет пять концов звезды, выводимой в левой половине клиентской области. Для такого многоугольника устанавливается режим заливки Alternate. Второй цикл for сдвигает вершины звезды в правую часть клиентской области, где многоугольник закрашивается в режиме Winding.
Обычно в режиме Winding закрашиваются все замкнутые области. Но не всегда все так просто — есть и ряд исключений. Чтобы определить, будет ли закрашена область в режиме Winding, мысленно проведите прямую из любой точки этой области в бесконечность. Если воображаемая линия пересекает нечетное число границ, область закрашивается (так же, как в режиме Alternate). Если же воображаемая линия пересекает четное число границ, то область может быть закрашена, а может остаться и свободной. Такая область закрашивается, если число граничных линий, направленных по часовой стрелке, не равно числу линий, направленных против часовой стрелки.
Немного подумав, можно нарисовать фигуру, внутренняя область которой останется незакрашенной в режиме Winding.
В следующих главах мы обсудим методы Fill подробнее: FillClosedCurve — в главе 13, a FillRegion и FillPath — в главе 15.
Источник
Ломаная PolyLine и замкнутая Polygon
На предыдущей странице Линии в паскаль мы рассматривали построение последовательных прямых линий, используя процедуры MoveTo и LineTo. Но зная координаты вершин ломаной (замкнутой или нет), того же можно добится с помощью процедур PolyLine и Polygon. Каким образом, и какое отличие между этими подпрограммами?
Процедура PolyLine рисования ломаной линии
✎ PolyLine — процедура, рисует ломаную линию по точкам, координаты которых заданы в массиве points. В PascalABC и PascalABC.Net эта процедура задается немного по-разному.
Сначала мы определим PolyLine в PascalABC и PascalABC.Net, а ниже приведем примеры.
PolyLine в PascalABC:
procedure PolyLine(var points: array[1..n] of Point; n: integer);
— Строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point, задаваемый с помощью записи:
PolyLine в PascalABC.Net:
procedure PolyLine(points: array of Point);
— Рисует ломаную по точкам, координаты которых заданы в массиве points. То есть points – это динамический массив, для которого нужно предварительно задать размер, а тип Point описывать не нужно (это встроенный тип PascalABC.Net).
Здесь видно, что в PascalABC.Net процедура PolyLine имеет только один параметр — собственно сам массив точек points (в отличии от простого PascalABC, где есть ещё второй параметр – размер массива, или количество точек). Ещё нужно помнить, что в динамических массивах нумерация начинается с 0.
Построим пример ломаной линии из массива точек PolyLine в PascalABC:
То самое получим при использовании MoveTo(x, y) и LineTo(x, y):
В обоих вариантах получим одинаковый результат:
Приведем пример той же программы, но в PascalABC.Net:
На странице Графики функций в паскале мы учились строить простейшие графики, используя процедуру Line для соединения точек графика. Приведем здесь пример ещё одного несложного графика на PascalABC.Net, но уже с использованием подпрограммы PolyLine. Комментарии в коде.
Результат построения графика функции корень квадратный в среде PascalABC.Net видно на рисунке:
Процедура Polygon рисования многоугольника
✎ Polygon — процедура, рисует замкнутую ломаную в PascalABC и заполненный многоугольник в PascalABC.Net по точкам, координаты которых заданы в массиве points.
Polygon в PascalABC:
procedure Polygon(var A: array[1..n] of Point; n: integer);
— Строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point. Здесь Point — тип точки в PascalABC.
Polygon в PascalABC.Net:
procedure Polygon(points: array of Point);
— Рисует заполненный многоугольник, координаты вершин которого заданы в массиве points. Здесь points — это динамический массив точек типа Point, имеющий поля X, Y (координаты точки в графическом окне). Point в PascalABC.Net — это встроенный тип данных (примитивный, базовый), то есть такой, описывать который не нужно.
Какое отличие Polygon от PolyLine? Отличие только в том, что в случае с Polygon первая точка замыкается с последней, и в результате получаем не просто ломаную линию, а замкнутую ломаную – многоугольник. Далее приводим серию примеров использвания процедуры Polygon в PascalABC и PascalABC.Net для рисования многоугольников.
Мгогоугольник в PascalABC
Рисуем треугольник в PascalABC:
Рисуем заполненный четырехугольник в PascalABC:
Многоугольник в PascalABC.Net
Рисуем треугольник в PascalABC.Net:
Рисуем закрашенный четырехугольник в PascalABC.Net:
Здесь мы сохранили результат изображения в графическом окне с помощью процедуры SaveWindow в файл с именем «Закрашенный четырехугольник.jpg» (этот файл будет находится в той же папке, куда вы сохраните код данной программы):
Закрашенные многоугольники в PascalABC.Net:
Программа работает так: при запуске в графическом окне каждые 2 секунды появляются закрашенные многоугольники со случайным количеством вершин от 3 до 30 (строка 16 кода). Потом определяем координаты вершин правильного многоугольника, и вслед за этим находим вершины нужного нам многоугольника как случайное отклонение на 15 пикселей (строки 20 — 28). Далее рисуем многоугольник (строка 32) и сохраняем его изображение (строка 35).
Обратите внимание, что этот процесс запущен в бексонечном цикле (условие false на выходе цикла repeat-until всегда ложно, поэтому он никогда не остановится), поэтому остановить его нужно просто закрыв окно. А ещё важное: каждые две секунды у вас в папке с программой будет появляться новый файл изображения типа «Закрашенный четырехугольник-1.jpg» , «Закрашенный четырехугольник-2.jpg» , «Закрашенный четырехугольник-3.jpg» и т.д., и если вам будут не нужны эти рисунки, то их надо удалить. Вот примеры таких многоугольников (наведите мышкой на картинку и прокручивайте вперед-назад):
Источник
imagefilledpolygon — Рисование закрашенного многоугольника
(PHP 4, PHP 5, PHP 7)
imagefilledpolygon — Рисование закрашенного многоугольника
Описание
imagefilledpolygon() создает закрашенный многоугольник в заданном изображении image .
Список параметров
Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .
Массив, содержащий x и y координаты последовательных вершин многоугольника.
Число вершин, должно быть не меньше 3.
Идентификатор цвета, созданный функцией imagecolorallocate() .
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Примеры
Пример #1 Пример использования imagefilledpolygon()
// задание массива точек для многоугольника
$values = array(
40 , 50 , // Point 1 (x, y)
20 , 240 , // Point 2 (x, y)
60 , 60 , // Point 3 (x, y)
240 , 20 , // Point 4 (x, y)
50 , 40 , // Point 5 (x, y)
10 , 10 // Point 6 (x, y)
);
// создание изображения
$image = imagecreatetruecolor ( 250 , 250 );
// определение цветов
$bg = imagecolorallocate ( $image , 0 , 0 , 0 );
$blue = imagecolorallocate ( $image , 0 , 0 , 255 );
// заливка фона
imagefilledrectangle ( $image , 0 , 0 , 249 , 249 , $bg );
// рисование многоугольника
imagefilledpolygon ( $image , $values , 6 , $blue );
// вывод изображения
header ( ‘Content-type: image/png’ );
imagepng ( $image );
imagedestroy ( $image );
?>
Результатом выполнения данного примера будет что-то подобное:
Источник
Урок 24. Графические методы FillRectangle, FillEllipse и FillPolygon
В предыдущем уроке было показано применение графических методов в Visual Basic.NET для отображения на форме или элементе управления пустых или «незаполненных» фигур.
В этом уроке рассмотрим методs, которые рисуют фигуры, автоматически заполняемые каким-либо цветом. Эти методы обычно имеют префикс «Fill» (заполнить). Например FillRectangle, FillEllipse и FillPolygon.
Справочная информация
Методы FillRectangle, FillEllipse используются для отображения закрашенного прямоугольника и закрашенного эллипса. Параметры методов FillRectangle, FillEllipse, кроме первого, такие же, как у методов DrawRectangle, DrawEllipse. Первый параметр Pen (перо) меняется на Brush (Кисть.
Графические методы DrawPolygon и FillPolygon используются для построения соответственно многоугольника и закрашенного многоугольника.
Параметры этих методов — перо или кисть и массив, задающий координаты вершин многоугольника. Координаты точек должны задаваться в определенной последовательности, то есть одна точка является началом отрезка прямой, а следующая — ее концом. Точка, представляющая собой конец одной линии, в то е время является началом следующей.
Проект «My FillPolygon»
В системе программирования Visual Basic.NET создать проект «My FillPolygon», предназначенный для отображения рисунка, созданного с помощью графических методов FillRectangle, FillEllipse и FillPolygon. В качестве области для использовать графическое поле PictureBox.
- Создайте новый проект с именем «My FillPolygon», поместите на форму Графическое поле (PictureBox) и Кнопку (Button) так, как показано на рисунке.
Запустите проект и проверьте работу приложения. После щелчка на кнопке в графическом поле должен отобразится следующий рисунок.
В этом уроке было показано применение графических методов для отображения в графическом поле закрашенных фигур: прямоугольника, эллипса и многоугольника.
В следующем уроке будет показано применение математической системы координат, построение в ней треугольника по заданным координатам вершин.
Источник
Graphics. Draw Polygon Метод
Определение
Рисует многоугольник, определяемый массивом структур Point. Draws a polygon defined by an array of Point structures.
Перегрузки
Рисует многоугольник, определяемый массивом структур PointF. Draws a polygon defined by an array of PointF structures.
Рисует многоугольник, определяемый массивом структур Point. Draws a polygon defined by an array of Point structures.
DrawPolygon(Pen, PointF[])
Рисует многоугольник, определяемый массивом структур PointF. Draws a polygon defined by an array of PointF structures.
Параметры
Структура Pen, определяющая цвет, ширину и стиль многоугольника. Pen that determines the color, width, and style of the polygon.
Массив структур PointF, которые представляют вершины многоугольника. Array of PointF structures that represent the vertices of the polygon.
Исключения
pen имеет значение null . pen is null .
-или- -or- points имеет значение null . points is null .
Примеры
Следующий пример кода предназначен для использования с Windows Forms и требует PaintEventArgs e , что является параметром Paint обработчика событий. The following code example is designed for use with Windows Forms, and it requires PaintEventArgs e , which is a parameter of the Paint event handler. Код выполняет следующие действия. The code performs the following actions:
Создает черное перо. Creates a black pen.
Создает массив из семи точек для вершин многоугольника. Creates an array of seven points for the vertices of the polygon.
Рисует многоугольник на экране. Draws the polygon to the screen.
Комментарии
Каждая пара двух последовательных точек в массиве указывает сторону многоугольника. Every pair of two consecutive points in the array specifies a side of the polygon. Кроме того, если последняя и первая точки массива не совпадают, они указывают последнюю сторону многоугольника. In addition, if the last point and the first of the array point do not coincide, they specify the last side of the polygon.
Источник