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].


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