Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include "stdio.h"
- #include "iostream"
- #include "stdlib.h"
- #include "math.h"
- #include <algorithm>
- #include <time.h>
- #include <glut.h>
- #include <string>
- #include <fstream>
- #include <windows.h>
- #include <iomanip>
- using namespace std;
- int width = 1100;
- int height = 600;
- void DrawAxis();
- void Draw();
- void Enable2D(int width, int height);
- void PrintText(float x, float y, string string);
- double* massi;
- double* massi1;
- int mass[10];
- int mass1[30];
- float N, h;
- void Init() // Инициализирует пространство
- {
- Enable2D(width, height);
- glClearColor(1, 1, 1, 1);
- }
- void Draw()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- DrawAxis(); //Рисует оси, значения и штрихи
- glutSwapBuffers();// Swap buffers (has to be done at the end)
- }
- void DrawA() // Оси х и у
- {
- // Draw X axis
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 0.0f);
- glVertex2f(-width / 2, -200);
- glVertex2f(width / 2, -200);
- glEnd();
- // Draw Y axis
- glBegin(GL_LINES);
- glColor3f(0.0f, 0.0f, 0.0f);
- glVertex2f(-width / 2 + 100, -height / 2);
- glVertex2f(-width / 2 + 100, height / 2);
- glEnd();
- // стрелка Y
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glBegin(GL_TRIANGLES);
- glColor3f(0, 0, 0);
- glVertex2f(-width / 2 + 100, height / 2);
- glVertex2f(-width / 2 + 100 - 5, height / 2 - 5);
- glVertex2f(-width / 2 + 100 + 5, height / 2 - 5);
- // стрелка X
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glBegin(GL_TRIANGLES);
- glColor3f(0, 0, 0); // рисуем треугольник
- glVertex2f(width / 2, -200);
- glVertex2f(width / 2 - 5, -205);
- glVertex2f(width / 2 - 5, -195);
- glEnd();
- PrintText(-25 - width / 2 + 100, height / 2 - 15, "v(x)");
- PrintText(width / 2 - 18, -190, "x");
- // штрихи на х
- glLineWidth(1); // ширина линии 1
- glBegin(GL_LINES);
- glColor3d(0, 0, 0); // цвет
- for (int i = -width / 2; i < width / 2; i += 20) {
- glVertex2f(i, -202);
- glVertex2f(i, -198);
- }
- glEnd();
- //значение на х
- glColor3f(0, 0, 0);
- char values_1[5] = "";
- for (int i = -width / 2 + 100, k = 0; i < height; i += 100, k += 50) {
- if (k != 0)
- {
- glRasterPos2f(i - 5, -215);
- sprintf_s(values_1, "%d", k);
- int j = strlen(values_1);
- for (int i = 0; i < j; i++)
- {
- glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values_1[i]);
- }
- }
- }
- }
- void DrawAxis()// Оси на первом графике
- {
- DrawA();
- int step = 20;
- int stepy = 40;
- // штрихи на y
- glLineWidth(1); // ширина линии 1
- glBegin(GL_LINES);
- glColor3d(0, 0, 0); // цвет
- for (int i = -height / 2 + 20; i < height / 2; i += stepy) {
- glVertex2f(-width / 2 + 94, i);
- glVertex2f(-width / 2 + 106, i);
- }
- glEnd();
- //значения на y
- glColor3f(0, 0, 0);
- char values[5] = "";
- for (int i = 0, k = 0; k <= 10; i += stepy, k++) {
- sprintf_s(values, "%d", k);
- if (k == 10)PrintText(-width / 2 + 70, i - 205, "1");
- else {
- PrintText(-width / 2 + 70, i - 205, "0,");
- int j = strlen(values);
- for (int i = 0; i < j; i++)
- {
- glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values[i]);
- }
- }
- }
- }
- void Enable2D(int width, int height)
- {
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-width / 2.0f, width / 2.0f, -height / 2.0f, height / 2.0f, 0.0f, 1.0f);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- //Подпрограмма, показывающая текст на экране (для расположения координат и названий осей графиков)
- void PrintText(float x, float y, string string)
- {
- char* text = new char[string.length()];
- glColor3f(0, 0, 0);
- glRasterPos2f(x, y);
- for (int i = 0; i < string.length(); i++)
- text[i] = string[i];
- for (int i = 0; i < string.length(); i++)
- {
- glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, text[i]);
- x += 2;
- }
- delete[] text;
- }
- int* multiplication(int matrixSize, int* vector, int** matrix)
- {
- // объявление одномерного динамического массива
- int* out = new int[matrixSize];
- // умножение элементов матрицы на вектор
- for (int ix = 0; ix < matrixSize; ix++)
- {
- out[ix] = 0;
- for (int jx = 0; jx < matrixSize; jx++)
- out[ix] += matrix[ix][jx] * vector[jx];
- }
- return out;
- }
- int main(int argc, char** argv)
- {
- setlocale(0, "");
- int matrixSize = 0; // количество строк и столбцов
- cout << "Введите количество строк и столбцов матрицы Ф: ";
- cin >> matrixSize;;
- // объявление двумерного динамического массива
- int** matrix = new int*[matrixSize];
- for (int count = 0; count < matrixSize; count++)
- matrix[count] = new int[matrixSize];
- //заполнение матрицы
- for (int ix = 0; ix < matrixSize; ix++)
- for (int jx = 0; jx < matrixSize; jx++)
- {
- cout << "matrix[" << (ix + 1) << "][" << (jx + 1) << "] = ";
- cin >> matrix[ix][jx];
- }
- // объявление одномерного динамического массива
- int* vector = new int[matrixSize];
- cout << "Введите элементы вектора X(0):\n";
- // заполнение вектора
- for (int ix = 0; ix < matrixSize; ix++)
- {
- cout << "vector[" << (ix + 1) << "] = ";
- cin >> vector[ix];
- }
- int p;
- cout << "Введите количество шагов N: ";
- cin >> p;
- cout << "\nВведенная матрица Ф:\n";
- for (int ix = 0; ix < matrixSize; ix++)
- {
- for (int jx = 0; jx < matrixSize; jx++)
- {
- cout << setw(4) << matrix[ix][jx];
- }
- cout << endl;
- }
- cout << "\nВведенный вектор X(0):\n";
- for (int ix = 0; ix < matrixSize; ix++)
- {
- cout << setw(4) << vector[ix] << endl;
- }
- for (int k = 0; k < p - 1; k++)
- {
- vector = multiplication(matrixSize, vector, matrix);
- cout << "\nРезультирующий вектор X(" << k + 1 << "):\n";
- for (int ix = 0; ix < matrixSize; ix++)
- {
- cout << setw(4) << vector[ix] << endl;
- }
- }
- // высвобождение памяти отводимой под двумерный динамический массив:
- for (int count = 0; count < matrixSize; count++)
- delete[] matrix[count];
- // высвобождение памяти отводимой под одномерный динамический массив
- delete[] vector;
- // Initialize opengl (via glut)
- glutInit(&argc, argv); // инициализация GLUT
- glutInitWindowPosition(0, 300);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
- glutInitWindowSize(width, height);// окно размера width х height
- glutCreateWindow("Axes");//создание окна
- glutDisplayFunc(Draw);
- Init();
- // регистрация обратных вызовов
- // Основной цикл GLUT
- glutMainLoop();
- delete[] massi;
- delete[] massi1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement