FloodFi11(hDC. (PointBz[0].x+PointBz[3].x+PointBz[6].x)/3.
(PointBz[0].y+PointBz[3].y+PointBz[6].y)/3.RGB(255.0.0));

продолжение &

Вывод графических примитивов

Листинг 13.2 {продолжение)

//Отметка положения управляющих точек.

Ellipse(hDCl.PtBz2[3].x-2.PtBz2[3].y-2.PtBz2[3].x+2.PtBz2[3].y+2); El 1 ipse(hDCl.PtBz2[4].x-2.PtBz2[4].y-2.PtBz2[5].x+2.PtBz2[4].y+2); El 1i pse(hDCl.PtBz2[5].x-2.PtBz2[5].y-2.PtBz2[5].x+2.PtBz2[5].y+2); Ellipse(hDCl.PtBz2[6].x-2.PtBz2[6].y-2.PtBz2[8].x+2.PtBz2[6].y+2);

Опорные точки двух показанных на рис. 13.3 фигур (концы кривых Безье) получены при помощи сдвига точек первой фигуры. Положение вспомогательных точек отмечено на рисунке кружками. В правой фигуре вспомогательные точки совпадают с концами отрезков и не искривляют соединительных линий. В двух отрезках средней фигуры вспомогательные точки смещены вверх, и это искривляет линии. На левой фигуре вспомогательные точки находятся по разные стороны от линии, что приводит к появлению на линиях точек перегиба. Опорные точки одной из линий первой фигуры соединены ломаной линией, которая показывает, что в крайних точках кривой ее производные совпадают с наклоном соответствующего звена ломаной.

Несмотря на то что кривые Безье образовали замкнутую фигуру, ее внутренняя область не закрасилась кистью, так как она является сочетанием линий, а не двумерной плоской фигурой. Заливки таких областей выполняются функцией Fl oodFi 110, реализующей так называемый затравочный алгоритм закраски. Функция должна получать цвет границы области и координаты внутренней точки области, с которой начнется заливка. В следующем вызове функции для вычисления внутренней точки фигуры было применено усреднение координат лучей звезды, записанных в элементах О, 3, 6 массива PointBz[]:

FloodFi11(hDC. (PointBz[0].x+PointBz[3].x+PointBz[6].x)/3.
(PointBz[0].y+PointBz[3].y+PointBz[6].y)/3.RGB(255.0.0));

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


⇐ Предыдущая| |Следующая ⇒