Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. //Перша програма слугує ілюстрацією використання ламаної лінії, набору полімаркерів і підписів, що складаються з растрових символів, для побудови лінійного графіка за даними для кожного місяця протягом року. Тут використовується пропорційний шрифт, хоча по точках на графіку легше вирівнюється шрифт з постійною шириною символів. Оскільки растрове розташування визначається по лівому нижньому куту за допомогою функції визначення растрового розташування, необхідно змістити точку відліку, щоб вирівняти центр текстового рядка за розташуванням точок на графіці.
  2. #include <GL/glut.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.    GLsizei winWidth = 600, winHeight = 500;
  6. /* Вихідний розмір вікна зображення. */
  7.    GLint xRaster = 25, yRaster = 150;
  8. /* Ініціалізація растрового розташування. */
  9.    GLubyte label [36] = {'J','a','n', 'F','e','b', 'M','a', 'r','A','p','r', 'M','a','y', 'J','u', 'n', 'J','u','l', 'A','u','g', 'S','e', 'p', 'O','c','t', 'N','o','v', 'D','e', 'c'};
  10.    GLint dataValue [12] = {420, 342, 324, 310, 262, 185,190, 196, 217, 240, 312, 438};
  11. void init (void) {
  12.    glClearColor (1.0, 1.0, 1.0, 1.0);   // Біле вікно.
  13.    glMatrixMode (GL_PROJECTION);
  14.    gluOrtho2D (0.0, 600.0, 0.0, 500.0);
  15. }
  16. void lineGraph (void) {
  17.    GLint month, k;
  18.    GLint x = 30;    // Ініціалізація координати х.
  19.    glClear (GL_COLOR_BUFFER_BIT);
  20. /*Чисте вікно зображення.*/
  21.    glColor3f (0.0, 0.0, 1.0); //Синій колір лінії.
  22.    glBegin (GL_LINE_STRIP);
  23. /*Відображення графіку у вигляді ламаної лінії. */
  24. for (k =0; k < 12; k++)
  25.    glVertex2i (x + k*50, dataValue [k]); glEnd ( );
  26.    glColor3f (1.0, 0.0, 0.0); //Червоний колір маркера.
  27. for (k =0; k < 12; k++) {
  28. /* Відображення даних полімаркером (зірочками). */
  29.     glRasterPos2i (xRaster + k*50, dataValue [k] - 4); glutBitmapCharacter (GLUT_BITMAP_9_BY_15, '*');
  30. }
  31.     glColor3f (0.0, 0.0, 0.0); // Чорний колір тексту.
  32.     xRaster = 20;
  33. /* Відображення підписів на діаграмі. */
  34. for (month = 0; month < 12; month++) {
  35.     glRasterPos2i (xRaster, yRaster);
  36. for (k = 3*month; k < 3*month + 3; k++){ glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, label [k]);
  37.      xRaster += 50;}
  38.      glFlush ( );
  39. }
  40. void winReshapeFcn (GLint newWidth, GLint newHeight){
  41.   glMatrixMode (GL_PROJECTION);
  42.   glLoadIdentity ( ) ;
  43.   gluOrtho2D (0.0, GLdouble (newWidth),
  44.   0.0, GLdouble (newHeight));
  45.   glClear   (GL_COLOR_BUFFER_BIT);
  46. }
  47. void main   (int argc,   char**  argv)   {
  48. glutInit   (&argc,   argv);
  49. glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  50. glutInitWindowPosition (100, 100);
  51. glutInitWindowSize (winWidth, winHeight);
  52. glutCreateWindow ("Лінійний графік даних");
  53. init ( );
  54. glutDisplayFunc (lineGraph); glutReshapeFunc (winReshapeFcn); glutMainLoop ( );
  55. }
  56.  
  57.  
  58. //У другій програмі використовується той же набір даних і будується гістограма. Ця програма  проілюструє застосування зафарбованих прямокутників, а також підписів, що складаються з растрових символів.
  59. //вторая часть
  60. void barChart (void) {
  61. GLint month, k, h;
  62. glClear(GL_COLOR_BUFFER_BIT); // Чисте вікно зображення.
  63. glColor3f (1.0, 0.0, 0.0);
  64. /* Червоний колір прямокутників. */
  65. for (k = 0; k < 12; k++)
  66. glRecti (20 + k*50, 165, 40 + k*50, dataValue [k]); glColor3f (0.0, 0.0, 0.0); // Чорний колір тексту.
  67. xRaster = 20;
  68. /* Відображення підписів на діаграмі. */
  69. for (month = 0; month < 12; month++) {
  70. glRasterPos2i (xRaster, yRaster);
  71. for (h = 3*month; h < 3*month + 3; h++){
  72.    glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12,label[h]);
  73.    xRaster += 50;
  74.    }
  75.    glFlush ( );
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement