DarkDevourer

Курсовая ООП (рабочая)

May 20th, 2020
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.63 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <math.h>
  4. #include <cstdlib>
  5. #include <string>
  6. #include <fstream>
  7. #include <GL/freeglut.h>
  8. #include <windows.h>
  9. #include <ctime>
  10.  
  11. using namespace std;
  12.  
  13.  
  14. class Graphics;
  15. static Graphics* currentInstance;
  16. class Graphics
  17. {
  18. private:
  19. double *X;
  20. int N, w, h;
  21. int error_file;
  22. public:
  23. Graphics(int);
  24. ~Graphics();
  25. void Fill_Rand(int, int);
  26. void Fill_File();
  27. int Get_Error();
  28. void Set_Error();
  29. void Reset_Error();
  30. void Printing_Arrays_into_Files();
  31. void Graph_Draw1(int argc, char * argv[]);
  32. void Graph_Draw2(int argc, char * argv[]);
  33. void Graph_Draw3(int argc, char * argv[]);
  34. private:
  35. static void drawCallback1();
  36. static void drawCallback2();
  37. static void drawCallback3();
  38. void Graphics_Creation1();
  39. void Graphics_Creation2();
  40. void Graphics_Creation3();
  41. void PrintText(float x, float y, int r, int g, int b, string string);
  42. void ScreenShot1(int W, int H);
  43. void ScreenShot2(int W, int H);
  44. void ScreenShot3(int W, int H);
  45. };
  46.  
  47. void Graphics::drawCallback1() {currentInstance->Graphics_Creation1();}
  48. void Graphics::drawCallback2() {currentInstance->Graphics_Creation2();}
  49. void Graphics::drawCallback3() {currentInstance->Graphics_Creation3();}
  50.  
  51. int Graphics::Get_Error() {return error_file;}
  52.  
  53. void Graphics::Set_Error() { error_file = 0; };
  54.  
  55. void Graphics::Reset_Error() { error_file = 1; };
  56.  
  57. Graphics::Graphics(int N1)
  58. {
  59. this->N = N1;
  60. this->w = 1900;
  61. this->error_file = 1;
  62. this->h = 1000;
  63. X = new double[N1];
  64. }
  65.  
  66. Graphics::~Graphics()
  67. {
  68. delete[] X;
  69. }
  70.  
  71. void Graphics::Fill_Rand(int range, int min)
  72. {
  73. srand(time(NULL));
  74. for (int i = 0; i < N; i++)
  75. X[i] = rand() % range + min;
  76. }
  77.  
  78. void Graphics::Fill_File()
  79. {
  80. ifstream fin("C:\\Kursovaya\\KursovayaInput.txt");
  81. string tmp;
  82. int i;
  83. if (!fin.is_open())
  84. {
  85. cout << "Файл открыть не удалось. Пожалуйста, проверьте наличие файла.\nИмя файла по умолчанию - C:\\Kursovaya\\KursovayaInput.txt" << endl;
  86. Set_Error();
  87. return;
  88. }
  89. for ( i = 0; i < N; i++)
  90. {
  91. try
  92. {
  93. fin >> tmp;
  94. X[i] = stod(tmp);
  95. }
  96. catch (...)
  97. {
  98. cout << "Произошла ошибка.";
  99. Set_Error();
  100. fin.close();
  101. return;
  102. }
  103.  
  104. }
  105. fin.close();
  106. }
  107.  
  108. void Graphics::Graph_Draw1(int argc, char * argv[])
  109. {
  110. currentInstance = this;
  111. glutInit(&argc, argv);
  112. glutInitDisplayMode(GLUT_DOUBLE);
  113. glutInitWindowPosition(0, 0);
  114. glutInitWindowSize(w, h);
  115. glutCreateWindow("Графики массивов");
  116.  
  117. glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
  118. GLUT_ACTION_GLUTMAINLOOP_RETURNS);
  119.  
  120. glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  121.  
  122. glViewport(0, 0, w, h);
  123.  
  124. glMatrixMode(GL_PROJECTION);
  125. glLoadIdentity();
  126. gluOrtho2D(0, w, 0, h);
  127.  
  128. glMatrixMode(GL_MODELVIEW);
  129. glLoadIdentity();
  130.  
  131. ::glutDisplayFunc(Graphics::drawCallback1);
  132.  
  133. glutMainLoop();
  134. }
  135.  
  136. void Graphics::Graph_Draw2(int argc, char * argv[])
  137. {
  138. currentInstance = this;
  139. glutInit(&argc, argv);
  140. glutInitDisplayMode(GLUT_DOUBLE);
  141. glutInitWindowPosition(0, 0);
  142. glutInitWindowSize(w, h);
  143. glutCreateWindow("Графики массивов");
  144.  
  145. glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
  146. GLUT_ACTION_GLUTMAINLOOP_RETURNS);
  147.  
  148. glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  149.  
  150. glViewport(0, 0, w, h);
  151.  
  152. glMatrixMode(GL_PROJECTION);
  153. glLoadIdentity();
  154. gluOrtho2D(0, w, 0, h);
  155.  
  156. glMatrixMode(GL_MODELVIEW);
  157. glLoadIdentity();
  158.  
  159. ::glutDisplayFunc(Graphics::drawCallback2);
  160.  
  161. glutMainLoop();
  162. }
  163.  
  164. void Graphics::Graph_Draw3(int argc, char * argv[])
  165. {
  166. currentInstance = this;
  167. glutInit(&argc, argv);
  168. glutInitDisplayMode(GLUT_DOUBLE);
  169. glutInitWindowPosition(0, 0);
  170. glutInitWindowSize(w, h);
  171. glutCreateWindow("Графики массивов");
  172.  
  173. glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
  174. GLUT_ACTION_GLUTMAINLOOP_RETURNS);
  175.  
  176. glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  177.  
  178. glViewport(0, 0, w, h);
  179.  
  180. glMatrixMode(GL_PROJECTION);
  181. glLoadIdentity();
  182. gluOrtho2D(0, w, 0, h);
  183.  
  184. glMatrixMode(GL_MODELVIEW);
  185. glLoadIdentity();
  186.  
  187. ::glutDisplayFunc(Graphics::drawCallback3);
  188.  
  189. glutMainLoop();
  190. }
  191.  
  192. void Graphics::Printing_Arrays_into_Files()
  193. {
  194. int k;
  195. ofstream out;
  196. string tmp;
  197. out.open("C:\\Kursovaya\\KursovayaOutput.txt");
  198. if (!out.is_open())
  199. {
  200. cout << "Файл для записи массивов: C:\\Kursovaya\\KursovayaOutput.txt - открыть не удалось." << endl;
  201. Set_Error();
  202. return;
  203. }
  204. out << "Массив X[k]:" << endl;
  205. for (k = 0; k < N; k++) {out << "X[" << k << "] = " << X[k] << endl;}
  206. out.close();
  207. }
  208.  
  209. void Graphics :: Graphics_Creation1()
  210. {
  211. string changer;
  212. int length_x = w - 15;
  213. int length_y = floor(h - 60);
  214. double y_max, y_min, length;
  215. int k, i, y;
  216. double mast_y;
  217. double mast_x = floor(w - 15 / N);
  218. glClear(GL_COLOR_BUFFER_BIT);
  219.  
  220. glBegin(GL_LINES);
  221. glColor3f(0.0, 0.0, 0.0);
  222. glVertex2i(5, h - 30);
  223. glColor3f(0.0, 0.0, 0.0);
  224. glVertex2i(5, h - 30 - length_y);
  225. glEnd();
  226.  
  227. glBegin(GL_LINES);
  228. glColor3f(0.0, 0.0, 0.0);
  229. glVertex2i(5, h - 30);
  230. glColor3f(0.0, 0.0, 0.0);
  231. glVertex2i(0, h - 30 - 10);
  232. glEnd();
  233. glBegin(GL_LINES);
  234. glColor3f(0.0, 0.0, 0.0);
  235. glVertex2i(5, h - 30);
  236. glColor3f(0.0, 0.0, 0.0);
  237. glVertex2i(10, h - 30 - 10);
  238. glEnd();
  239.  
  240. y_max = 200;
  241. y_min = -200;
  242.  
  243. for (i = 1; i < N; i++)
  244. {
  245. if (y_max < X[i]){y_max = X[i];}
  246. else if (y_min > X[i]){y_min = X[i];}
  247. }
  248.  
  249. length = y_max - y_min;
  250. mast_y = length_y / length;
  251. y = h - 30 - length_y * y_max / length;
  252. glBegin(GL_LINES);
  253. glColor3f(0.0, 0.0, 0.0);
  254. glVertex2i(5, y);
  255. glColor3f(0.0, 0.0, 0.0);
  256. glVertex2i(w, y);
  257. glEnd();
  258.  
  259. glBegin(GL_LINES);
  260. glColor3f(0.0, 0.0, 0.0);
  261. glVertex2i(w, y);
  262. glColor3f(0.0, 0.0, 0.0);
  263. glVertex2i(w - 10, y - 5);
  264. glEnd();
  265. glBegin(GL_LINES);
  266. glColor3f(0.0, 0.0, 0.0);
  267. glVertex2i(w, y);
  268. glColor3f(0.0, 0.0, 0.0);
  269. glVertex2i(w - 10, y + 5);
  270. glEnd();
  271.  
  272. PrintText(15, h - 30, 0, 0, 0, "X[i]");
  273. PrintText(w - 10, y - 15, 0, 0, 0, "i");
  274.  
  275. for (i = 0; i < N; i++)
  276. {
  277. glBegin(GL_LINES); //X[k]
  278. glColor3f(0.0, 0.0, 0.0);
  279. glVertex2i(5 + mast_x * i / N, y + 5);
  280. glColor3f(0.0, 0.0, 0.0);
  281. glVertex2i(5 + mast_x * i / N, y - 5);
  282. glEnd();
  283. PrintText(5 + mast_x * i / N, y - 17, 0, 0, 0, to_string(i));
  284. }
  285.  
  286. for (k = 1; k <= 19; k++)
  287. {
  288.  
  289. if (y - k * length_y / 20 >= h - 30 - length_y)
  290. {
  291. glBegin(GL_LINES); //X[k]
  292. glColor3f(0.0, 0.0, 0.0);
  293. glVertex2i(0, y - k * length_y / 20);
  294. glColor3f(0.0, 0.0, 0.0);
  295. glVertex2i(10, y - k * length_y / 20);
  296. glEnd();
  297. changer = to_string(-(y_max - y_min) / 20 * k);
  298. if (-(y_max - y_min) / 20 * k + floor(-(y_max - y_min) / 20 * k) <= 0.000001){changer.erase(changer.find(","), changer.length() - changer.find(","));}
  299. if (k != 0){PrintText(15, y - k * length_y / 20 - 5, 0, 0, 0, changer);}
  300. }
  301. else
  302. {
  303. glBegin(GL_LINES); //X[k]
  304. glColor3f(0.0, 0.0, 0.0);
  305. glVertex2i(0, y + (20 - k) * length_y / 20);
  306. glColor3f(0.0, 0.0, 0.0);
  307. glVertex2i(10, y + (20 - k) * length_y / 20);
  308. glEnd();
  309. changer = to_string((y_max - y_min) / 20 * (20 - k));
  310. if ((y_max - y_min) / 20 * (20 - k) - floor((y_max - y_min) / 20 * (20 - k)) <= 0.000001)
  311. {
  312. changer.erase(changer.find(","), changer.length() - changer.find(","));
  313. }
  314. PrintText(15, y + (20 - k) * length_y / 20 - 5, 0, 0, 0, changer);
  315. }
  316. }
  317.  
  318. for (k = 0; k < N; k++)
  319. {
  320. if (k != N - 1)
  321. {
  322. glBegin(GL_LINES);
  323. glColor3f(0.0, 0.0, 0.0);
  324. glVertex2i(5 + k * mast_x / N, y + X[k] * mast_y);
  325. glColor3f(0.0, 0.0, 0.0);
  326. glVertex2i(5 + (k + 1) * mast_x / N, y + X[k + 1] * mast_y);
  327. glEnd();
  328.  
  329. }
  330. glPointSize(5);
  331. glBegin(GL_POINTS);
  332. glColor3f(0.0, 0.0, 0.0);
  333. glVertex2i(5 + mast_x * k / N, y + X[k] * mast_y);
  334. glEnd();
  335. }
  336.  
  337. ScreenShot1(w, h);
  338. glutSwapBuffers();
  339. }
  340.  
  341. void Graphics::Graphics_Creation2()
  342. {
  343. string changer;
  344. int length_x = w - 15;
  345. int length_y = h - 60;
  346. double y_max, y_min, length;
  347. int u, i, y;
  348. double mast_y;
  349. double mast_x = floor(w - 15 / N);
  350. glClear(GL_COLOR_BUFFER_BIT);
  351.  
  352. glBegin(GL_LINES);
  353. glColor3f(0.0, 0.0, 0.0);
  354. glVertex2i(5, h - 30);
  355. glColor3f(0.0, 0.0, 0.0);
  356. glVertex2i(5, h - 30 - length_y);
  357. glEnd();
  358.  
  359. glBegin(GL_LINES);
  360. glColor3f(0.0, 0.0, 0.0);
  361. glVertex2i(5, h - 30);
  362. glColor3f(0.0, 0.0, 0.0);
  363. glVertex2i(0, h - 40);
  364. glEnd();
  365. glBegin(GL_LINES);
  366. glColor3f(0.0, 0.0, 0.0);
  367. glVertex2i(5, h - 30);
  368. glColor3f(0.0, 0.0, 0.0);
  369. glVertex2i(10, h - 40);
  370. glEnd();
  371.  
  372. y_max = 200;
  373. y_min = -200;
  374. for (i = 1; i < N; i++)
  375. {
  376. if (y_max < X[i]) {y_max = X[i];}
  377. else if (y_min > X[i]) {y_min = X[i];}
  378. }
  379. length = y_max - y_min;
  380. mast_y = length_y / length;
  381. y = h - 30 - length_y * y_max / length;
  382.  
  383. glBegin(GL_LINES);
  384. glColor3f(0.0, 0.0, 0.0);
  385. glVertex2i(5, y);
  386. glColor3f(0.0, 0.0, 0.0);
  387. glVertex2i(w, y);
  388. glEnd();
  389.  
  390. glBegin(GL_LINES);
  391. glColor3f(0.0, 0.0, 0.0);
  392. glVertex2i(w, y);
  393. glColor3f(0.0, 0.0, 0.0);
  394. glVertex2i(w - 10, y - 5);
  395. glEnd();
  396. glBegin(GL_LINES);
  397. glColor3f(0.0, 0.0, 0.0);
  398. glVertex2i(w, y);
  399. glColor3f(0.0, 0.0, 0.0);
  400. glVertex2i(w - 10, y + 5);
  401. glEnd();
  402.  
  403. PrintText(15, h - 30, 0, 0, 0, "X[i]");
  404. PrintText(w - 10, y - 15, 0, 0, 0, "i");
  405.  
  406. for (u = 0; u < N; u++)
  407. {
  408. glBegin(GL_LINES); //X[k]
  409. glColor3f(0.0, 0.0, 0.0);
  410. glVertex2i(5 + mast_x * u / N, y + 5);
  411. glColor3f(0.0, 0.0, 0.0);
  412. glVertex2i(5 + mast_x * u / N, y - 5);
  413. glEnd();
  414. PrintText(5 + mast_x * u / N, y - 17, 0, 0, 0, to_string(u));
  415. }
  416.  
  417. for (u = 1; u <= 19; u++)
  418. {
  419. if (y - u * length_y / 20 >= h - 30 - length_y)
  420. {
  421. glBegin(GL_LINES); //X[k]
  422. glColor3f(0.0, 0.0, 0.0);
  423. glVertex2i(0, y - u * length_y / 20);
  424. glColor3f(0.0, 0.0, 0.0);
  425. glVertex2i(10, y - u * length_y / 20);
  426. glEnd();
  427. if (u != 0)
  428. {
  429. changer = to_string(-(y_max - y_min) / 20 * u);
  430. if (-(y_max - y_min) / 20 * u + floor(-(y_max - y_min) / 20 * u) <= 0.000001) {changer.erase(changer.find(","), changer.length() - changer.find(","));}
  431. PrintText(15, y - u * length_y / 20 - 5, 0, 0, 0, changer);
  432. }
  433. }
  434. else
  435. {
  436. glBegin(GL_LINES); //X[k]
  437. glColor3f(0.0, 0.0, 0.0);
  438. glVertex2i(0, y + (20 - u) * length_y / 20);
  439. glColor3f(0.0, 0.0, 0.0);
  440. glVertex2i(10, y + (20 - u) * length_y / 20);
  441. glEnd();
  442. changer = to_string((y_max - y_min) / 20 * (20 - u));
  443. if ((y_max - y_min) / 20 * (20 - u) - floor((y_max - y_min) / 20 * (20 - u)) <= 0.000001) { changer.erase(changer.find(","), changer.length() - changer.find(",")); }
  444. PrintText(15, y + (20 - u) * length_y / 20 - 5, 0, 0, 0, changer);
  445. }
  446. }
  447.  
  448. for (u = 0; u < N; u++)
  449. {
  450. glBegin(GL_LINES);
  451. glColor3f(0.0, 0.0, 0.0);
  452. glVertex2i(5 + u * mast_x / N, y);
  453. glColor3f(0.0, 0.0, 0.0);
  454. glVertex2i(5 + (u)* mast_x / N, y + X[u] * mast_y);
  455. glEnd();
  456. glPointSize(5);
  457. glBegin(GL_POINTS);
  458. glColor3f(0.0, 0.0, 0.0);
  459. glVertex2i(5 + mast_x * u / N, y + X[u] * mast_y);
  460. glEnd();
  461.  
  462. }
  463.  
  464. ScreenShot2(w, h);
  465. glutSwapBuffers();
  466. }
  467.  
  468. void Graphics::Graphics_Creation3()
  469. {
  470. string changer;
  471. int length_x = w - 15;
  472. int length_y = floor(h - 60);
  473. double y_max, y_min, length;
  474. int k, i, y;
  475. double mast_y;
  476. double mast_x = floor(w - 15 / N);
  477. glClear(GL_COLOR_BUFFER_BIT);
  478.  
  479. glBegin(GL_LINES);
  480. glColor3f(0.0, 0.0, 0.0);
  481. glVertex2i(5, h - 30);
  482. glColor3f(0.0, 0.0, 0.0);
  483. glVertex2i(5, h - 30 - length_y);
  484. glEnd();
  485.  
  486. glBegin(GL_LINES);
  487. glColor3f(0.0, 0.0, 0.0);
  488. glVertex2i(5, h - 30);
  489. glColor3f(0.0, 0.0, 0.0);
  490. glVertex2i(0, h - 30 - 10);
  491. glEnd();
  492. glBegin(GL_LINES);
  493. glColor3f(0.0, 0.0, 0.0);
  494. glVertex2i(5, h - 30);
  495. glColor3f(0.0, 0.0, 0.0);
  496. glVertex2i(10, h - 30 - 10);
  497. glEnd();
  498.  
  499. y_max = 200;
  500. y_min = -200;
  501.  
  502. for (i = 1; i < N; i++)
  503. {
  504. if (y_max < X[i]) {y_max = X[i];}
  505. else if (y_min > X[i]) {y_min = X[i];}
  506. }
  507.  
  508. length = y_max - y_min;
  509. mast_y = length_y / length;
  510. y = h - 30 - length_y * y_max / length;
  511. glBegin(GL_LINES);
  512. glColor3f(0.0, 0.0, 0.0);
  513. glVertex2i(5, y);
  514. glColor3f(0.0, 0.0, 0.0);
  515. glVertex2i(w, y);
  516. glEnd();
  517.  
  518. glBegin(GL_LINES);
  519. glColor3f(0.0, 0.0, 0.0);
  520. glVertex2i(w, y);
  521. glColor3f(0.0, 0.0, 0.0);
  522. glVertex2i(w - 10, y - 5);
  523. glEnd();
  524. glBegin(GL_LINES);
  525. glColor3f(0.0, 0.0, 0.0);
  526. glVertex2i(w, y);
  527. glColor3f(0.0, 0.0, 0.0);
  528. glVertex2i(w - 10, y + 5);
  529. glEnd();
  530.  
  531. PrintText(15, h - 30, 0, 0, 0, "X[i]");
  532. PrintText(w - 10, y - 15, 0, 0, 0, "i");
  533. for (i = 0; i < N; i++)
  534. {
  535. glBegin(GL_LINES); //X[k]
  536. glColor3f(0.0, 0.0, 0.0);
  537. glVertex2i(5 + mast_x * i / N, y + 5);
  538. glColor3f(0.0, 0.0, 0.0);
  539. glVertex2i(5 + mast_x * i / N, y - 5);
  540. glEnd();
  541. PrintText(5 + mast_x * i / N, y - 17, 0, 0, 0, to_string(i));
  542. }
  543. for (k = 1; k <= 19; k++)
  544. {
  545. if (y - k * length_y / 20 >= h - 30 - length_y)
  546. {
  547. glBegin(GL_LINES); //X[k]
  548. glColor3f(0.0, 0.0, 0.0);
  549. glVertex2i(0, y - k * length_y / 20);
  550. glColor3f(0.0, 0.0, 0.0);
  551. glVertex2i(10, y - k * length_y / 20);
  552. glEnd();
  553. changer = to_string(-(y_max - y_min) / 20 * k);
  554. if (-(y_max - y_min) / 20 * k + floor(-(y_max - y_min) / 20 * k) <= 0.000001) {changer.erase(changer.find(","), changer.length() - changer.find(","));}
  555. if (k != 0) {PrintText(15, y - k * length_y / 20 - 5, 0, 0, 0, changer);}
  556. }
  557. else
  558. {
  559. glBegin(GL_LINES); //X[k]
  560. glColor3f(0.0, 0.0, 0.0);
  561. glVertex2i(0, y + (20 - k) * length_y / 20);
  562. glColor3f(0.0, 0.0, 0.0);
  563. glVertex2i(10, y + (20 - k) * length_y / 20);
  564. glEnd();
  565. changer = to_string((y_max - y_min) / 20 * (20 - k));
  566. if ((y_max - y_min) / 20 * (20 - k) - floor((y_max - y_min) / 20 * (20 - k)) <= 0.000001) { changer.erase(changer.find(","), changer.length() - changer.find(",")); }
  567. PrintText(15, y + (20 - k) * length_y / 20 - 5, 0, 0, 0, changer);
  568. }
  569. }
  570.  
  571. for (k = 0; k < N; k++)
  572. {
  573. glBegin(GL_LINES); //X[k]
  574. glColor3f(0.0, 0.0, 0.0);
  575. glVertex2i(5 + k * mast_x / N, y);
  576. glColor3f(0.0, 0.0, 0.0);
  577. glVertex2i(5 + k * mast_x / N, y + X[k] * mast_y);
  578. glEnd();
  579.  
  580. glBegin(GL_LINES);
  581. glColor3f(0.0, 0.0, 0.0);
  582. glVertex2i(5 + (k + 1) * mast_x / N, y);
  583. glColor3f(0.0, 0.0, 0.0);
  584. glVertex2i(5 + (k + 1)* mast_x / N, y + X[k] * mast_y);
  585. glEnd();
  586.  
  587. glBegin(GL_LINES); //X[k]
  588. glColor3f(0.0, 0.0, 0.0);
  589. glVertex2i(5 + k * mast_x / N, y + X[k] * mast_y);
  590. glColor3f(0.0, 0.0, 0.0);
  591. glVertex2i(5 + (k + 1)* mast_x / N, y + X[k] * mast_y);
  592. glEnd();
  593. }
  594.  
  595. ScreenShot3(w, h);
  596. glutSwapBuffers();
  597. }
  598.  
  599. void Graphics::PrintText(float x, float y, int r, int g, int b, string string)
  600. {
  601. char *text = new char[string.length()];
  602. glColor3f(r, g, b);
  603. glRasterPos2f(x, y);
  604. for (int i = 0; i < string.length(); i++)
  605. text[i] = string[i];
  606. for (int i = 0; i < string.length(); i++)
  607. {
  608. glutBitmapCharacter(GLUT_BITMAP_9_BY_15, text[i]);
  609. x += 2;
  610. }
  611. delete[] text;
  612. }
  613.  
  614. void Graphics::ScreenShot1(int W, int H)
  615. {
  616. FILE *F = fopen("C:\\Kursovaya\\Graphs1.bmp", "w");
  617. if (F == NULL)
  618. {
  619. cout << "Файл для записи графика массива X[k] открыть/создать не удалось." << endl;
  620. Set_Error();
  621. return;
  622. }
  623.  
  624. const int imSize = W * H * 3;
  625. unsigned char *image = new unsigned char[imSize];
  626.  
  627. if (!image)
  628. {
  629. cout << "Не удалось выделить память под массивы." << endl;
  630. Set_Error();
  631. return;
  632. }
  633.  
  634. memset(image, 0, imSize);
  635. glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, image);
  636. BITMAPINFO bmi;
  637. unsigned char BMI = sizeof(BITMAPINFOHEADER);
  638. unsigned char BMF = sizeof(BITMAPFILEHEADER);
  639. memset(&bmi, 0, BMI);
  640. bmi.bmiHeader.biSize = BMI;
  641. bmi.bmiHeader.biHeight = H;
  642. bmi.bmiHeader.biWidth = W;
  643. bmi.bmiHeader.biPlanes = 1;
  644. bmi.bmiHeader.biBitCount = 24;
  645. bmi.bmiHeader.biCompression = BI_RGB;
  646. bmi.bmiHeader.biSizeImage = imSize;
  647.  
  648. int nBitsOffset = BMF + BMI;
  649. LONG lImageSize = imSize;
  650. LONG lFileSize = nBitsOffset + lImageSize;
  651. BITMAPFILEHEADER bmfh;
  652. bmfh.bfType = 0x4D42;
  653. bmfh.bfOffBits = nBitsOffset;
  654. bmfh.bfSize = lFileSize;
  655. bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
  656.  
  657. UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, BMF, F);
  658. UINT nWrittenInfoHeaderSize = fwrite(&bmi, 1, BMI, F);
  659. UINT nWrittenDIBDataSize = fwrite(image, 1, imSize, F);
  660. UINT total = nWrittenDIBDataSize + nWrittenInfoHeaderSize + nWrittenFileHeaderSize;
  661. delete[] image;
  662. fclose(F);
  663. }
  664.  
  665. void Graphics::ScreenShot2(int W, int H)
  666. {
  667. FILE *F = fopen("C:\\Kursovaya\\Graphs2.bmp", "w");
  668. if (F == NULL)
  669. {
  670. cout << "Файл для записи графика массива X[k] открыть/создать не удалось." << endl;
  671. Set_Error();
  672. return;
  673. }
  674.  
  675. const int imSize = W * H * 3;
  676. unsigned char *image = new unsigned char[imSize];
  677.  
  678. if (!image)
  679. {
  680. cout << "Не удалось выделить память под массивы." << endl;
  681. Set_Error();
  682. return;
  683. }
  684.  
  685. memset(image, 0, imSize);
  686. glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, image);
  687. BITMAPINFO bmi;
  688. unsigned char BMI = sizeof(BITMAPINFOHEADER);
  689. unsigned char BMF = sizeof(BITMAPFILEHEADER);
  690. memset(&bmi, 0, BMI);
  691. bmi.bmiHeader.biSize = BMI;
  692. bmi.bmiHeader.biHeight = H;
  693. bmi.bmiHeader.biWidth = W;
  694. bmi.bmiHeader.biPlanes = 1;
  695. bmi.bmiHeader.biBitCount = 24;
  696. bmi.bmiHeader.biCompression = BI_RGB;
  697. bmi.bmiHeader.biSizeImage = imSize;
  698.  
  699. int nBitsOffset = BMF + BMI;
  700. LONG lImageSize = imSize;
  701. LONG lFileSize = nBitsOffset + lImageSize;
  702. BITMAPFILEHEADER bmfh;
  703. bmfh.bfType = 0x4D42;
  704. bmfh.bfOffBits = nBitsOffset;
  705. bmfh.bfSize = lFileSize;
  706. bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
  707.  
  708. UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, BMF, F);
  709. UINT nWrittenInfoHeaderSize = fwrite(&bmi, 1, BMI, F);
  710. UINT nWrittenDIBDataSize = fwrite(image, 1, imSize, F);
  711. UINT total = nWrittenDIBDataSize + nWrittenInfoHeaderSize + nWrittenFileHeaderSize;
  712. delete[] image;
  713. fclose(F);
  714. }
  715.  
  716. void Graphics::ScreenShot3(int W, int H)
  717. {
  718. FILE *F = fopen("C:\\Kursovaya\\Graphs3.bmp", "w");
  719. if (F == NULL)
  720. {
  721. cout << "Файл для записи графика массива X[k] открыть/создать не удалось." << endl;
  722. Set_Error();
  723. return;
  724. }
  725.  
  726. const int imSize = W * H * 3;
  727. unsigned char *image = new unsigned char[imSize];
  728.  
  729. if (!image)
  730. {
  731. cout << "Не удалось выделить память под массивы." << endl;
  732. Set_Error();
  733. return;
  734. }
  735.  
  736. memset(image, 0, imSize);
  737. glReadPixels(0, 0, W, H, GL_RGB, GL_UNSIGNED_BYTE, image);
  738. BITMAPINFO bmi;
  739. unsigned char BMI = sizeof(BITMAPINFOHEADER);
  740. unsigned char BMF = sizeof(BITMAPFILEHEADER);
  741. memset(&bmi, 0, BMI);
  742. bmi.bmiHeader.biSize = BMI;
  743. bmi.bmiHeader.biHeight = H;
  744. bmi.bmiHeader.biWidth = W;
  745. bmi.bmiHeader.biPlanes = 1;
  746. bmi.bmiHeader.biBitCount = 24;
  747. bmi.bmiHeader.biCompression = BI_RGB;
  748. bmi.bmiHeader.biSizeImage = imSize;
  749.  
  750. int nBitsOffset = BMF + BMI;
  751. LONG lImageSize = imSize;
  752. LONG lFileSize = nBitsOffset + lImageSize;
  753. BITMAPFILEHEADER bmfh;
  754. bmfh.bfType = 0x4D42;
  755. bmfh.bfOffBits = nBitsOffset;
  756. bmfh.bfSize = lFileSize;
  757. bmfh.bfReserved1 = bmfh.bfReserved2 = 0;
  758.  
  759. UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, BMF, F);
  760. UINT nWrittenInfoHeaderSize = fwrite(&bmi, 1, BMI, F);
  761. UINT nWrittenDIBDataSize = fwrite(image, 1, imSize, F);
  762. UINT total = nWrittenDIBDataSize + nWrittenInfoHeaderSize + nWrittenFileHeaderSize;
  763. delete[] image;
  764. fclose(F);
  765. }
  766.  
  767. int main(int argc, char * argv[])
  768. {
  769. setlocale(LC_ALL, "RUSSIAN");
  770. string key, key1;
  771. int N, range, min;
  772.  
  773. cout << "Программа, рисующая график, частотную характеристику и гистограмму" << endl;
  774. while (1)
  775. {
  776. cout << "Выберите режим работы программы:\n1 - создание массива.\n0 - выход из программы.\nПримечание: название файла: \"C:\\Kursovaya\\KursovayaInput.txt\"" << endl << "Выбрано ";
  777. getline(cin, key);
  778. if (key == "1")
  779. {
  780. cout << "Введите размер массива:" << endl;
  781. cin >> N;
  782. Graphics *Mas;
  783. Mas = new Graphics(N);
  784. cout << "Введите режим создания массива:\n1 - массив, созданный генератором случайных чисел.\n2 - массив, полученный из файла." << endl;
  785. cin.ignore();
  786. getline(cin, key1);
  787. if (key1 == "1")
  788. {
  789. cout << "Введите диапазон массива:" << endl;
  790. cin >> range;
  791. cout << "Введите минимальное возможное значение массива:" << endl;
  792. cin >> min;
  793. Mas->Fill_Rand(range, min);
  794. Mas->Printing_Arrays_into_Files();
  795. if (Mas->Get_Error() == 0)
  796. {
  797. cout << "Не удалось записать массив в файл. Возврат в меню." << endl;
  798. continue;
  799. }
  800. Mas->Graph_Draw1(argc, argv);
  801. if (Mas->Get_Error() == 0) {cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue;}
  802. Mas->Graph_Draw2(argc, argv);
  803. if (Mas->Get_Error() == 0) { cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue; }
  804. Mas->Graph_Draw3(argc, argv);
  805. if (Mas->Get_Error() == 0) { cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue; }
  806. cin.ignore();
  807. continue;
  808. }
  809. else if (key1 == "2")
  810. {
  811. Mas->Fill_File();
  812. if (Mas->Get_Error() == 0)
  813. {
  814. cout << "Не удалось записать массив в файл. Возврат в меню." << endl;
  815. continue;
  816. }
  817. Mas->Printing_Arrays_into_Files();
  818. if (Mas->Get_Error() == 0) { continue; }
  819. Mas->Graph_Draw1(argc, argv);
  820. if (Mas->Get_Error() == 0) { cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue; }
  821. Mas->Graph_Draw2(argc, argv);
  822. if (Mas->Get_Error() == 0) { cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue; }
  823. Mas->Graph_Draw3(argc, argv);
  824. if (Mas->Get_Error() == 0) { cout << "Не удалось сохранить рисунок в файл. Возврат в меню." << endl; continue; }
  825. continue;
  826. }
  827. else
  828. {
  829. cout << "Такой команды не существует в данной программе. Возврат в меню." << endl;
  830. continue;
  831. }
  832. }
  833. else if (key == "0")
  834. {
  835. cout << "Завершение работы программы." << endl;
  836. return 0;
  837. }
  838. else {cout << "Такой команды не существует в данной программе. Возврат в меню." << endl;}
  839. }
  840. }
Add Comment
Please, Sign In to add comment