binomialCoeffs (nCtrlPts - 1, C); for (k = 0; k <= nBezCurvePts; k++) {

u = GLfloat (k) / GLfloat (nBezCurvePts); computeBezPt (u, SbezCurvePt, nCtrlPts, ctrlPts, C); plotPoint (bezCurvePt);

}

delete [ ] C;

}

void displayFcn (void)

{

/* Задается число контрольных точек и число точек

* кривой, изображаемых на кривой Безье.

*/

GLint nCtrlPts = 4, nBezCurvePts = 1000; wcPt3D ctrlPts [4] = { {-40.0, -40.0, 0.0},

{-10.0, 200.0, 0.0}, {10.0, -200.0, 0.0}, {40.0, 40.0, 0.0} }; glClear (GL_COLOR_BUFFER_BIT);

/* Очищается окно на экране дисплея. */

glPointSize (4);

glColor3f (1.0, 0.0, 0.0); // Цвет точек выбран красным,

bezier (ctrlPts, nCtrlPts, nBezCurvePts); glFlush ( );

}

void winReshapeFcn (GLint newWidth, GLint newHeight)

{

/* Характеристическое отношение поддерживается равным 1. */ glViewport (0, 0, newHeight, newHeight); glMatrixMode (GL_PROJECTION); glLoadldentity ( );

gluOrtho2D (xwcMin, xwcMax, ywcMin, ywcMax); glClear (GL_COLOR_BUFFER_BIT);

}

void main (int argc, char** argv)

{

glutlnit (&argc,> argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (50, 50); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Кривая Безье");

init ( ) ;

glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFcn);

glutMainLoop ( );

}

МЕТОДЫ ПРОЕКТИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ КРИВЫХ БЕЗЬЕ

Чтобы сгенерировать замкнутую кривую Безье, положение последней контрольной точки выбирается равным положению первой, как в примере, показанном на рис. 8.35. Кроме того, ввод нескольких контрольных точек с одинаковыми координатами равносильно присвоению большего весового коэффициента этой точке. На рис. 8.36 введены две одинаковые контрольные точки, и видно, что получающаяся кривая притягивается к этой точке.

БИ-СПЛАЙНЫ

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

РАЦИОНАЛЬНЫЕ СПЛАЙНЫ

Рациональные сплайны имеют два важных преимущества перед нерациональными. Во-первых, они точно представляют кривые второго порядка (конические сечения), такие как окружности и эллипсы. Нерациональные сплайны (полиномы) могут только аппроксимировать конические сечения. Эта возможность позволяет графическим пакетам моделировать все формы кривых с помощью одного представления (рациональных сплайнов), не требуя для обработки различных форм большой библиотеки криволинейных функций. Второе преимущество рациональных сплайнов заключается в том, что они инвариантны относительно перспективной проекции (раздел 7.8). Это означает, что перспективное преобразование можно применять к контрольным точкам рациональной кривой, и получится правильная проекция кривой. С другой стороны, нерациональные сплайны, не инвариантны относительно перспективной проекции. Поэтому обычно в проектах графической разработки для построения рациональных би-сплайнов используются неравномерные представления вектора узлов. Данные сплайны называются “NURBS” (Nonuniform Rational B-splines - неравномерные рациональные би-сплайны).


⇐ вернуться назад | | далее ⇒