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, были получены путем изменения радиуса г окружности. В зависимости о того, как изменяется радиус г, можно получить улитку, кардиоиду, спираль или другие подобные фигуры.
Рис. 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].х = хО; // Инициализация положения кривой.