Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.205.56.209] |
|
Сообщ.
#1
,
|
|
|
По заданию необходимо построить графики двух функций в одной системе координат, ширина линий графика должна быть больше ширины линий координатных осей, цвет графиков должен быть различным - это сделала, работает. Помогите, пожалуйста, проградуировать и подписать шкалы координатных осей...
#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(); } |
Сообщ.
#2
,
|
|
|
Цитата KhNJu @ Градуировка:Помогите, пожалуйста, проградуировать 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(); glFinish(); glutSwapBuffers(); Прикреплённая картинка
|
Сообщ.
#3
,
|
|
|
Подписи как-то так можно:
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 раз... Ну, думаю, суть понятна. |
Сообщ.
#4
,
|
|
|
Уже, правда, разобралась... но всё равно большое спасибо! Может еще кому пригодится)
|
Сообщ.
#5
,
|
|
|
Славян, у меня к Вам вопрос... Вообщем моя программа выводила только штрихи (разметку), я решила поставить ещё цифры... Но компилятор не пропускает
_gcvt #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(); } Прикреплённая картинка
|
Сообщ.
#6
,
|
|
|
Я обычно использую gcvt, просто тут что-то VisualStudio сказала, что надо с подчёркиванием. Попробуйте без подчёркивания или ещё какой-нибудь функцией перевода числа в строку.
|