curvePt[0].у = уО; switch (curveNum) {
case limaçon: curvePt[0].x += a + b; break;
case cardioid: curvePt[0].x += a + a; break;
case threeLeaf: curvePt[0].x += a; break;
case fourLeaf: curvePt[0].x += a; break;
case spiral : break;
default: break;
}
thêta = dtheta; while (thêta < two_Pi)
{
switch (curveNum)
{
case limaçon:
r = a * cos (thêta) + b; break;
case cardioid:
r = a * (1 + cos (thêta)); break;
case threeLeaf:
r = a * cos (3 * thêta); break;
case fourLeaf:
r = a * cos (2 * thêta); break;
case spiral:
r = (a / 4.0) * thêta; break;
default: break;
}
curvePt [].].x = xO + r * cos (thêta); curvePt[l].y = yO + r * sin (thêta); lineSegment (curvePt[0], curvePt[1]);
curvePt[0].x = curvePt[J].x; curvePt[0].y = curvePt[1].y; thêta += dtheta;
)
}
void displayFcn (void)
{
GLint curveNum;
glClear (GL_COLOR_BUFFER_BIT) ; // Чистое окно изображения, cout « "\n Введите целое число, соответствующее\п" ; cout « "одному из перечисленных ниже названий кривой.\п"; cout « "Для выхода из программы нажмите любую другую клавишу.\п" ;
cout « "\n 1 - улитка, 2 - кардиоида, 3 - трехлистник,
4 - четырехлистник, 5 - спираль: ";
cin » curveNum;
if (curveNum == 1 I I curveNum ==2 | | curveNum == 3 | |
curveNum == 4 I I curveNum == 5 )
drawCurve (curveNum);
else
exit (0); glFlush ( );
void winReshapeFcn (GLint newWidth, GLint newHeight) { glMatrixMode (GL_PROJECTION); glLoadldentity ( );
glu0rtho2D (0.0, (GLdouble) newWidth, 0.0, (GLdouble)
newHeight);
glClear (GL_COLOR_BUFFER_BIT);
}
void main (int argc, char** argv) { glutlnit (&argc, argv);
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (100, 100); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Построение кривых");
init ( ) ;
glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFcn);
glutMainLoop ( );
}
ЛИТЕРАТУРА
Основные сведения об алгоритмах Брезенхема можно найти в статьях [40, 41]. Информация о методах средней точки есть в сборнике [168]. Параллельные методы построения прямых линий и окружностей рассматриваются в работах [247, 410]. Многие другие способы изображения и обработки графических примитивов обсуждаются в публикациях [8, 122, 151, 176, 244].
Дополнительные примеры программ с использованием функций примитивов OpenGL приводятся в руководстве [400]. Список всех функций примитивов OpenGL можно найти в справочнике [320]. Исчерпывающая информация о GLUT представлена в книге [174].