Используя массив опорных точек 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); }

Пользуясь рассмотренным примером, можно запрограммировать формирование кривых Безье по произвольному количеству опорных точек, что нельзя сделать при помощи стандартных примитивов.

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

Некоторые атрибуты контекста устройства влияют на вид выводимого изображения. При помощи этих атрибутов задаются, например, параметры текста, линий и двумерных фигур.


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