Используя массив опорных точек PointBz2[], следует при помощи функции SetPi xel () нарисовать кривые Безье, показанные на рис. 13.3 слева. Этот код приведен в листинге 13.3.
Листинг 13.3
int MaxXY - 80: int i:
HDC hdc - GetDC(hWnd);
i-3; //Показываем опорные точки второй кривой. . Ellipse(hdc.PointBz2[i].x-2.PointBz2[i].y-2.
PointBz2[i].x+2.PointBz2[i].y+2): Ellipse(hdc.PointBz2[i+l].x-2.PointBz2[i+l].y-l.
Poi ntBz2[i+1].x+2.Poi ntBz2[i+1].y+2): Ellipse(hdc.PointBz2[i+2].x-2.PointBz2[i+2].y-2.
PointBz2[i+2].x+2.PointBz2[i+2].y+2): Ellipse(hdc.PointBz2[i+3].x-2.PointBz2[i+3].y-2.
Poi ntBz2[i +3].x+2.Poi ntBz2[i +3].y+2); for (i - 0; i<15: i - i+3) //Цикл рисования пяти кривых.
продолжение &
Вывод графических примитивов
Листинг 13.3 {продолжение)
{
for (int t - 0: t<- MaxXY; t++) //Рисование кривой по четырем опорным точкам {
int х «((MaxXY-t)*(MaxXY-t)*(MaxXY-t)*PointBz2[i].x+ 3*t*(MaxXY-t)*(MaxXY-t)*PointBz2[i+l].x+ 3*t*t*(MaxXY-t)*PointBz2[i+2].x+
t*t*t*PointBz2[i+3].x)/MaxXY/MaxXY/MaxXY: int y-((MaxXY-t)*(MaxXY-t)*(MaxXY-t)*PointBz2[i].y+ 3*t*(MaxXY-t)*(MaxXY-t)*PointBz2[i+l].y+ 3*t*t*(MaxXY-t)*PointBz2[i+2].y+
t*t*t*PointBz2[i+3].y)/MaxXY/MaxXY/MaxXY: SetPixelV(hdc.x.y.RGB(255.0.0)); }
// PolyBezier (hdc. &PointBz2[i].4); Здесь можно вызвать этот примитив //и убедиться, что формируемая им кривая совпадает с кривой, которая //нарисована точками }
ReleaseDC(hWnd.hdc); }
Пользуясь рассмотренным примером, можно запрограммировать формирование кривых Безье по произвольному количеству опорных точек, что нельзя сделать при помощи стандартных примитивов.
й| Режимы вывода В отличие от пера и кисти, режим закраски многоугольников, цвет фона, параметры логической системы координат и ряд других переменных хранятся непосредственно в структуре контекста, поэтому их надо только изменять. Создавать и уничтожать их не требуется.
Некоторые атрибуты контекста устройства влияют на вид выводимого изображения. При помощи этих атрибутов задаются, например, параметры текста, линий и двумерных фигур.