KhNJu | Дата: Вторник, 21 Марта 2017, 09:07 | Сообщение # 1 |
уже был
Сейчас нет на сайте
| Не знаю, правильно ли я выбрала раздел для обращения со своим вопросом.... только начала разбираться с OpenGL, возникли трудности, с которыми самой справиться не получается...Очень надеюсь на Вашу помощь! Вообщем, по заданию необходимо построить графики двух функций в одной системе координат, ширина линий графика должна быть больше ширины линий координатных осей, цвет графиков должен быть различным - это сделала, работает. Помогите, пожалуйста, проградуировать и подписать шкалы координатных осей...
Код #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(); }
|
|
| |
LetsOffBrains | Дата: Вторник, 21 Марта 2017, 10:34 | Сообщение # 2 |
Project SoRDeLKa
Сейчас нет на сайте
| for( int i = -9; i < 10; i++){ double k = 10.0 // коэффицент для уменьшения линии, если так можно glBegin(GL_LINES); glVertex2f(i, -1.0 / k); glVertex2f(i, 1.0 / k); some_function_printing_text(text = i, x = i, y = -2.0 / k) glEnd(); } Я не разбираюсь, но что-то такое, вероятно, должно получиться.
|
|
| |
KhNJu | Дата: Вторник, 21 Марта 2017, 10:52 | Сообщение # 3 |
уже был
Сейчас нет на сайте
| Спасибо! Разметку сделать получилось, а подписать оси - нет...
|
|
| |
Saitei | Дата: Вторник, 21 Марта 2017, 14:57 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| KhNJu, названия темы изменил: 1. Старое название не несло смысловой нагрузки, не раскрывало суть темы 2. Писать капсом - дурная привычка
|
|
| |