glColor3f (0.0, 0.0, 1.0); // Синий цвет окружности.

pieChart ( ); 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);

/* Изменение параметров размеров окна изображения. */ winWidth = newWidth; winHeight = newHeight;

}

void main (int arge, char** argv)

{

glutlnit (Sarge, argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (100, 100); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Секторная диаграмма"); init ( );

glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFcn); glutMainLoop ( );

}

Изображения различных фигур можно получить с помощью небольших изменений уравнения окружности в нашей последней программе-примере, где для вычисления координат точек, принадлежащих кривой, используются параметрические полярные уравнения (3.28). Затем полученные значения используются в качестве координат концов прямолинейных отрезков, с помощью которых кривые аппроксимируются ломаными линиями. Кривые, изображенные на рис. 3.70, были получены путем изменения радиуса г окружности. В зависимости о того, как изменяется радиус г, можно получить улитку, кардиоиду, спираль или другие подобные фигуры.

Фигуры, изображения которых можно получить с помощью процедуры с1гаыСигуе: а) улитка, б) кардиоида, в) трехлистник, г) четырехлистник и д) спираль

Рис. 3.70. Фигуры, изображения которых можно получить с помощью процедуры с1гаыСигуе: а) улитка, б) кардиоида, в) трехлистник, г) четырехлистник и д) спираль

♦include <GL/glut.h> tinclude <stdlib.h> #include <math.h> finclude <iostream.h> struct screenPt {

GLint x;

GLint y;

} ;

typedef enum limaçon = 1, cardioid, threeLeaf, fourLeaf,

spiral curveName;

GLsizei winWidth = 600, winHeight = 500;

// Исходный размер окна изображения.

void init (void) {

glClearColor (1.0, 1.0, 1.0, 1.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (0.0, 200.0, 0.0, 150.0);

}

void lineSegment (screenPt ptl, screenPt pt2) { glBegin (GL_LINES);

glVertex2i (ptl.x, ptl.y);

glVertex2i (pt2.x, pt2.y);

glEnd ( );

}

void drawCurve (GLint curveNum) {

/* Улитка Паскаля является одной из модификаций уравнения

* окружности, при которой радиус изменяется как

* г = а * cos (thêta) + Ь с постоянными а и b. Кардиоидой

* называется улитка при а = Ь. Трехлистник и четырехлистник

* получаются, когда г = а * cos (n * thêta), при п = 3 и п = 2

* соответственно. Изображение спирали получается, когда г

* кратно thêta.

*/

const GLdouble twoPi = 6.283185;

const GLint a = 175, b = 60;

GLfloat r, theta, dtheta = 1.0 / float (a);

GLint xO = 200, yO = 250;

// Задание исходного положения на экране. screenPt curvePt[2];

glColor3f (0.0, 0.0, 0.0); // Задание черного цвета кривой. curvePt[0].х = хО; // Инициализация положения кривой.


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