На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Обозначить разметку на осях и подписать оси - OpenGL , проградуировать и подписать шкалы координатных осей
    По заданию необходимо построить графики двух функций в одной системе координат, ширина линий графика должна быть больше ширины линий координатных осей, цвет графиков должен быть различным - это сделала, работает. Помогите, пожалуйста, проградуировать и подписать шкалы координатных осей...
    ExpandedWrap disabled
      #include "stdafx.h"
      #include <GL/glut.h >
      #include <stdlib.h>
      #include <math.h>
      #include <stdarg.h>
       
      GLint Width = 350, Height = 350; //начальные размеры окна
       
      //Функция вырисовки на экране
      void Display()
      {
          glClearColor(1, 1, 0, 1); // цвет окна
          glClear(GL_COLOR_BUFFER_BIT); //очистка буфера цвета и буфера глубины
          glLineWidth(1); // ширина линий кооринатных осей
          glColor3f(0, 0, 0); // цвет координатных осей (черный)
          glBegin(GL_LINES); // ось ОХ, ось OY
          glVertex2f(-10, 0);
          glVertex2f(10, 0);
          glVertex2f(0, 10);
          glVertex2f(0, -10);
          glEnd();
       
          // построение графиков
          glLineWidth(2);
          glColor3f(1, 0, 0); // цвет графика 1-й функции (красный)
          glBegin(GL_LINE_STRIP); // график 1-й функции
          for (double i = 1; i <= 5; i += 0.1) { //промежуток нахождения решения
              double y = sqrt(log(i));
              glVertex2d(i, y);
          }
          glEnd();
          glBegin(GL_LINE_STRIP); // график 2-й функции
          glColor3f(0, 0, 1); // цвет графика 2-й функции (синий)
          for (double j = 1; j <= 5; j += 0.1) { //промежуток нахождения решения
              double k = pow(log(j), 1.0 / 4);
              glVertex2d(j, k);
          }
          glEnd();
          glFinish();
      }
       
      //Функция вызывается при изменении размеров окна
      void Reshape(GLint w, GLint h)
      {
          Width = w;
          Height = h;
       
          // устанавливаем размеры области отображения
          glViewport(0, 0, w, h);
       
          // отрографическая проекция
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          glOrtho(-20, 10, -20, 20, -10, 10);
          glMatrixMode(GL_MODELVIEW);
          glLoadIdentity();
      }
       
      // Функция обработки сообщений с клавиатуры
      void Keyboard(unsigned char key, int x, int y)
      {
      #define ESCAPE '\033'
          if (key == ESCAPE)
              exit(0);
      }
       
       
      // Главный цикл приложения
      void main(int argc, char* argv[])
      {
          glutInit(&argc, argv);
          glutInitDisplayMode(GLUT_RGB);
          glutInitWindowSize(Width, Height);
          glutCreateWindow("Графики функций");
          glutDisplayFunc(Display);
          glutReshapeFunc(Reshape);
          glutKeyboardFunc(Keyboard);
          glutMainLoop();
      }
      Цитата KhNJu @
      Помогите, пожалуйста, проградуировать
      Градуировка:
      ExpandedWrap disabled
        glLineWidth(1); // ширина линий координатных осей
            glColor3f(0, 0, 0); // цвет координатных осей (чёрный)
            glBegin( GL_LINES ); // ось ОХ, ось OY
                glVertex2i(-10, 0);
                glVertex2i(10, 0);
                glVertex2i(0, 10);
                glVertex2i(0, -10);
                for( int i=-10; i<=10; i++)
                    glVertex2f(i, 0.5f),    glVertex2f(i, -0.5f),   // ось Ox
                    glVertex2f(-0.5f, i),   glVertex2f( 0.5f, i);   // ось Oy
            glEnd();
      :-? У меня, кстати, рисуется всё только при добавлении в конце:
      ExpandedWrap disabled
        glFinish();
            glutSwapBuffers();
      Прикреплённая картинка
      Прикреплённая картинка
        Подписи как-то так можно:
        ExpandedWrap disabled
          char str[10];//="0.5";
              glColor3f(0.1, 0.1, 0.1);
              for( int i=-10; i<=10; i++)
              {
                  _gcvt( i/10.0, 1, str);
                  glRasterPos2f(0.6f, i-0.3); // вертикаль
                  for( unsigned int i=0; i<strlen(str); ++i)
                      glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
                  glRasterPos2f( i-0.3, -1.0f);
                  for( unsigned int i=0; i<strlen(str); ++i)
                      glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
              }
           
              glFinish();
        Прикреплённая картинка
        Прикреплённая картинка


        Добавлено
        Тьфу, я кажется масштаб перекрутил в 10 раз... :blush: Ну, думаю, суть понятна.
          Уже, правда, разобралась... но всё равно большое спасибо! Может еще кому пригодится)
            Славян, у меня к Вам вопрос... Вообщем моя программа выводила только штрихи (разметку), я решила поставить ещё цифры... Но компилятор не пропускает
            ExpandedWrap disabled
              _gcvt
            ... Вы не могли бы еще раз посмотреть мою программу?

            ExpandedWrap disabled
              #include "stdafx.h"
              #include <GL/glut.h >
              #include <stdlib.h>
              #include <math.h>
              #include <stdarg.h>
               
              GLint Width = 350, Height = 350; //начальные размеры окна
               
              // подпись координатных осей
              void drawText(GLfloat x, GLfloat y, void *font, char *text)
              {
                  glRasterPos2f(x, y);
                  for (int i = 0; text[i] != '\0'; i++)
                      glutBitmapCharacter(font, text[i]);
              }
               
              //Функция вырисовки на экране
              void Display()
              {
                  glClearColor(1, 1, 0, 1); // цвет окна
                  glClear(GL_COLOR_BUFFER_BIT); //очистка буфера цвета и буфера глубины
                  glLineWidth(1); // ширина линий кооринатных осей
                  glColor3f(0, 0, 0); // цвет координатных осей (черный)
                  glBegin(GL_LINES); // ось ОХ, ось OY
                  glVertex2f(-10, 0);
                  glVertex2f(10, 0);
                  glVertex2f(0, 10);
                  glVertex2f(0, -10);
                  // разметка
                  for (int i = -9; i < 9; i++){
                      glVertex2f(i, 0.2f), glVertex2f(i, -0.2f),   // ось Ox
                      glVertex2f(-0.2f, i), glVertex2f(0.2f, i);   // ось Oy
                  }
                  // подпись координат
                  char str[10];//="0.5";
                  glColor3f(0.1, 0.1, 0.1);
                  for (int i = -10; i <= 10; i++)
                  {
                      _gcvt(i / 10.0, 1, str);
                      glRasterPos2f(0.6f, i - 0.3); // вертикаль
                      for (unsigned int i = 0; i != '\0'; ++i)
                          glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
                      glRasterPos2f(i - 0.3, -1.0f);
                      for (unsigned int i = 0; i != '\0'; ++i)
                          glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
                  }
                  // направление координатных осей
                  glVertex2f(0, 10);
                  glVertex2f(-0.5, 9);
                  glVertex2f(0, 10);
                  glVertex2f(0.5, 9);
               
                  glVertex2f(10, 0);
                  glVertex2f(9, 0.5);
                  glVertex2f(10, 0);
                  glVertex2f(9, -0.5);
                  glEnd();
                  
               
                  // подпись координатных осей
                  drawText(9, -2, GLUT_BITMAP_8_BY_13, "X");
                  drawText(-1, 9, GLUT_BITMAP_8_BY_13, "Y");
               
                  
               
                  // построение графиков
                  glLineWidth(2);
                  glColor3f(1, 0, 0); // цвет графика 1-й функции (красный)
                  glBegin(GL_LINE_STRIP); // график 1-й функции
                  for (double i = 1; i <= 5; i += 0.1) { //промежуток нахождения решения
                      double y = sqrt(log(i));
                      glVertex2d(i, y);
                  }
                  glEnd();
                  glBegin(GL_LINE_STRIP); // график 2-й функции
                  glColor3f(0, 0, 1); // цвет графика 2-й функции (синий)
                  for (double j = 1; j <= 5; j += 0.1) { //промежуток нахождения решения
                      double k = pow(log(j), 1.0 / 4);
                      glVertex2d(j, k);
                  }
                  glEnd();
                  glFinish();
                  glutSwapBuffers();
              }
               
              //Функция вызывается при изменении размеров окна
              void Reshape(GLint w, GLint h)
              {
                  Width = w;
                  Height = h;
               
                  // устанавливаем размеры области отображения
                  glViewport(0, 0, w, h);
               
                  // отрографическая проекция
                  glMatrixMode(GL_PROJECTION);
                  glLoadIdentity();
                  glOrtho(-20, 10, -20, 20, -10, 10);
                  glMatrixMode(GL_MODELVIEW);
                  glLoadIdentity();
              }
               
              // Функция обработки сообщений с клавиатуры
              void Keyboard(unsigned char key, int x, int y)
              {
              #define ESCAPE '\033'
                  if (key == ESCAPE)
                      exit(0);
              }
               
              void main(int argc, char* argv[])
              {
                  glutInit(&argc, argv);
                  glutInitDisplayMode(GLUT_RGB);
                  glutInitWindowSize(Width, Height);
                  glutCreateWindow("Графики функций");
                  glutDisplayFunc(Display);
                  glutReshapeFunc(Reshape);
                  glutKeyboardFunc(Keyboard);
                  glutMainLoop();
              }




            Прикреплённая картинка
            Прикреплённая картинка
              Я обычно использую gcvt, просто тут что-то VisualStudio сказала, что надо с подчёркиванием. Попробуйте без подчёркивания или ещё какой-нибудь функцией перевода числа в строку. :blush:
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0763 ]   [ 22 queries used ]   [ Generated: 28.03.24, 09:51 GMT ]