Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.05 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "stdio.h"
  3. #include "iostream"
  4. #include "stdlib.h"
  5. #include "math.h"
  6. #include <algorithm>
  7. #include <time.h>
  8. #include <glut.h>
  9. #include <string>
  10. #include <fstream>
  11. #include <windows.h>
  12. #include <iomanip>
  13.  
  14. using namespace std;
  15.  
  16. int width = 1100;
  17. int height = 600;
  18. void DrawAxis();
  19. void Draw();
  20. void Enable2D(int width, int height);
  21. void PrintText(float x, float y, string string);
  22. double* massi;
  23. double* massi1;
  24. int mass[10];
  25. int mass1[30];
  26. float N, h;
  27.  
  28. void Init() // Инициализирует пространство
  29. {
  30. Enable2D(width, height);
  31. glClearColor(1, 1, 1, 1);
  32. }
  33.  
  34. void Draw()
  35. {
  36. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  37. glLoadIdentity();
  38. DrawAxis(); //Рисует оси, значения и штрихи
  39. glutSwapBuffers();// Swap buffers (has to be done at the end)
  40. }
  41.  
  42. void DrawA() // Оси х и у
  43. {
  44. // Draw X axis
  45. glBegin(GL_LINES);
  46. glColor3f(0.0f, 0.0f, 0.0f);
  47. glVertex2f(-width / 2, -200);
  48. glVertex2f(width / 2, -200);
  49. glEnd();
  50. // Draw Y axis
  51. glBegin(GL_LINES);
  52. glColor3f(0.0f, 0.0f, 0.0f);
  53. glVertex2f(-width / 2 + 100, -height / 2);
  54. glVertex2f(-width / 2 + 100, height / 2);
  55. glEnd();
  56. // стрелка Y
  57. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  58. glBegin(GL_TRIANGLES);
  59. glColor3f(0, 0, 0);
  60. glVertex2f(-width / 2 + 100, height / 2);
  61. glVertex2f(-width / 2 + 100 - 5, height / 2 - 5);
  62. glVertex2f(-width / 2 + 100 + 5, height / 2 - 5);
  63. // стрелка X
  64. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  65. glBegin(GL_TRIANGLES);
  66. glColor3f(0, 0, 0); // рисуем треугольник
  67. glVertex2f(width / 2, -200);
  68. glVertex2f(width / 2 - 5, -205);
  69. glVertex2f(width / 2 - 5, -195);
  70. glEnd();
  71. PrintText(-25 - width / 2 + 100, height / 2 - 15, "v(x)");
  72. PrintText(width / 2 - 18, -190, "x");
  73. // штрихи на х
  74. glLineWidth(1); // ширина линии 1
  75. glBegin(GL_LINES);
  76. glColor3d(0, 0, 0); // цвет
  77. for (int i = -width / 2; i < width / 2; i += 20) {
  78. glVertex2f(i, -202);
  79. glVertex2f(i, -198);
  80. }
  81. glEnd();
  82. //значение на х
  83. glColor3f(0, 0, 0);
  84. char values_1[5] = "";
  85. for (int i = -width / 2 + 100, k = 0; i < height; i += 100, k += 50) {
  86. if (k != 0)
  87. {
  88. glRasterPos2f(i - 5, -215);
  89. sprintf_s(values_1, "%d", k);
  90. int j = strlen(values_1);
  91. for (int i = 0; i < j; i++)
  92. {
  93. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values_1[i]);
  94. }
  95. }
  96. }
  97. }
  98. void DrawAxis()// Оси на первом графике
  99. {
  100. DrawA();
  101. int step = 20;
  102. int stepy = 40;
  103. // штрихи на y
  104. glLineWidth(1); // ширина линии 1
  105. glBegin(GL_LINES);
  106. glColor3d(0, 0, 0); // цвет
  107. for (int i = -height / 2 + 20; i < height / 2; i += stepy) {
  108. glVertex2f(-width / 2 + 94, i);
  109. glVertex2f(-width / 2 + 106, i);
  110. }
  111. glEnd();
  112. //значения на y
  113. glColor3f(0, 0, 0);
  114. char values[5] = "";
  115. for (int i = 0, k = 0; k <= 10; i += stepy, k++) {
  116. sprintf_s(values, "%d", k);
  117. if (k == 10)PrintText(-width / 2 + 70, i - 205, "1");
  118. else {
  119. PrintText(-width / 2 + 70, i - 205, "0,");
  120. int j = strlen(values);
  121. for (int i = 0; i < j; i++)
  122. {
  123. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values[i]);
  124. }
  125. }
  126. }
  127. }
  128. void Enable2D(int width, int height)
  129. {
  130. glViewport(0, 0, width, height);
  131. glMatrixMode(GL_PROJECTION);
  132. glLoadIdentity();
  133. glOrtho(-width / 2.0f, width / 2.0f, -height / 2.0f, height / 2.0f, 0.0f, 1.0f);
  134. glMatrixMode(GL_MODELVIEW);
  135. glLoadIdentity();
  136. }
  137. //Подпрограмма, показывающая текст на экране (для расположения координат и названий осей графиков)
  138. void PrintText(float x, float y, string string)
  139. {
  140. char* text = new char[string.length()];
  141. glColor3f(0, 0, 0);
  142. glRasterPos2f(x, y);
  143. for (int i = 0; i < string.length(); i++)
  144. text[i] = string[i];
  145. for (int i = 0; i < string.length(); i++)
  146. {
  147. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, text[i]);
  148. x += 2;
  149. }
  150. delete[] text;
  151. }
  152. int* multiplication(int matrixSize, int* vector, int** matrix)
  153. {
  154.  
  155. // объявление одномерного динамического массива
  156. int* out = new int[matrixSize];
  157. // умножение элементов матрицы на вектор
  158. for (int ix = 0; ix < matrixSize; ix++)
  159. {
  160. out[ix] = 0;
  161. for (int jx = 0; jx < matrixSize; jx++)
  162. out[ix] += matrix[ix][jx] * vector[jx];
  163. }
  164. return out;
  165. }
  166. int main(int argc, char** argv)
  167. {
  168. setlocale(0, "");
  169. int matrixSize = 0; // количество строк и столбцов
  170. cout << "Введите количество строк и столбцов матрицы Ф: ";
  171. cin >> matrixSize;;
  172.  
  173.  
  174. // объявление двумерного динамического массива
  175. int** matrix = new int*[matrixSize];
  176. for (int count = 0; count < matrixSize; count++)
  177. matrix[count] = new int[matrixSize];
  178.  
  179. //заполнение матрицы
  180. for (int ix = 0; ix < matrixSize; ix++)
  181. for (int jx = 0; jx < matrixSize; jx++)
  182. {
  183. cout << "matrix[" << (ix + 1) << "][" << (jx + 1) << "] = ";
  184. cin >> matrix[ix][jx];
  185. }
  186. // объявление одномерного динамического массива
  187. int* vector = new int[matrixSize];
  188. cout << "Введите элементы вектора X(0):\n";
  189.  
  190. // заполнение вектора
  191. for (int ix = 0; ix < matrixSize; ix++)
  192. {
  193. cout << "vector[" << (ix + 1) << "] = ";
  194. cin >> vector[ix];
  195.  
  196. }
  197. int p;
  198. cout << "Введите количество шагов N: ";
  199. cin >> p;
  200.  
  201. cout << "\nВведенная матрица Ф:\n";
  202. for (int ix = 0; ix < matrixSize; ix++)
  203. {
  204. for (int jx = 0; jx < matrixSize; jx++)
  205. {
  206. cout << setw(4) << matrix[ix][jx];
  207. }
  208. cout << endl;
  209. }
  210.  
  211. cout << "\nВведенный вектор X(0):\n";
  212. for (int ix = 0; ix < matrixSize; ix++)
  213. {
  214. cout << setw(4) << vector[ix] << endl;
  215. }
  216. for (int k = 0; k < p - 1; k++)
  217. {
  218. vector = multiplication(matrixSize, vector, matrix);
  219. cout << "\nРезультирующий вектор X(" << k + 1 << "):\n";
  220. for (int ix = 0; ix < matrixSize; ix++)
  221. {
  222. cout << setw(4) << vector[ix] << endl;
  223. }
  224. }
  225.  
  226. // высвобождение памяти отводимой под двумерный динамический массив:
  227. for (int count = 0; count < matrixSize; count++)
  228. delete[] matrix[count];
  229.  
  230. // высвобождение памяти отводимой под одномерный динамический массив
  231. delete[] vector;
  232. // Initialize opengl (via glut)
  233. glutInit(&argc, argv); // инициализация GLUT
  234. glutInitWindowPosition(0, 300);
  235. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  236. glutInitWindowSize(width, height);// окно размера width х height
  237. glutCreateWindow("Axes");//создание окна
  238. glutDisplayFunc(Draw);
  239. Init();
  240. // регистрация обратных вызовов
  241. // Основной цикл GLUT
  242. glutMainLoop();
  243. delete[] massi;
  244. delete[] massi1;
  245. return 0;
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement