Advertisement
Guest User

sav

a guest
Jan 22nd, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 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. using namespace std;
  13.  
  14. int width = 1100;
  15. int height = 600;
  16. void DrawAxis();
  17. void Draw();
  18. void Enable2D(int width, int height);
  19. void PrintText(float x, float y, string string);
  20. double* massi;
  21. double* massi1;
  22. int mass[10];
  23. int mass1[30];
  24. float N, h;
  25.  
  26. void Init() // Инициализирует пространство
  27. {
  28. Enable2D(width, height);
  29. glClearColor(1, 1, 1, 1);
  30. }
  31.  
  32. void Draw()
  33. {
  34. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  35. glLoadIdentity();
  36. DrawAxis(); //Рисует оси, значения и штрихи
  37. glutSwapBuffers();// Swap buffers (has to be done at the end)
  38. }
  39.  
  40. void DrawA() // Оси х и у
  41. {
  42. // Draw X axis
  43. glBegin(GL_LINES);
  44. glColor3f(0.0f, 0.0f, 0.0f);
  45. glVertex2f(-width / 2, -200);
  46. glVertex2f(width / 2, -200);
  47. glEnd();
  48. // Draw Y axis
  49. glBegin(GL_LINES);
  50. glColor3f(0.0f, 0.0f, 0.0f);
  51. glVertex2f(-width / 2 + 100, -height / 2);
  52. glVertex2f(-width / 2 + 100, height / 2);
  53. glEnd();
  54. // стрелка Y
  55. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  56. glBegin(GL_TRIANGLES);
  57. glColor3f(0, 0, 0);
  58. glVertex2f(-width / 2 + 100, height / 2);
  59. glVertex2f(-width / 2 + 100 - 5, height / 2 - 5);
  60. glVertex2f(-width / 2 + 100 + 5, height / 2 - 5);
  61. // стрелка X
  62. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  63. glBegin(GL_TRIANGLES);
  64. glColor3f(0, 0, 0); // рисуем треугольник
  65. glVertex2f(width / 2, -200);
  66. glVertex2f(width / 2 - 5, -205);
  67. glVertex2f(width / 2 - 5, -195);
  68. glEnd();
  69. PrintText(-25 - width / 2 + 100, height / 2 - 15, "v(x)");
  70. PrintText(width / 2 - 18, -190, "x");
  71. // штрихи на х
  72. glLineWidth(1); // ширина линии 1
  73. glBegin(GL_LINES);
  74. glColor3d(0, 0, 0); // цвет
  75. for (int i = -width / 2; i < width / 2; i += 20) {
  76. glVertex2f(i, -202);
  77. glVertex2f(i, -198);
  78. }
  79. glEnd();
  80. //значение на х
  81. glColor3f(0, 0, 0);
  82. char values_1[5] = "";
  83. for (int i = -width / 2 + 100, k = 0; i < height; i += 100, k += 50) {
  84. if (k != 0)
  85. {
  86. glRasterPos2f(i - 5, -215);
  87. sprintf_s(values_1, "%d", k);
  88. int j = strlen(values_1);
  89. for (int i = 0; i < j; i++)
  90. {
  91. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values_1[i]);
  92. }
  93. }
  94. }
  95. }
  96. void DrawAxis()// Оси на первом графике
  97. {
  98. DrawA();
  99. int step = 20;
  100. int stepy = 40;
  101. // штрихи на y
  102. glLineWidth(1); // ширина линии 1
  103. glBegin(GL_LINES);
  104. glColor3d(0, 0, 0); // цвет
  105. for (int i = -height / 2 + 20; i < height / 2; i += stepy) {
  106. glVertex2f(-width / 2 + 94, i);
  107. glVertex2f(-width / 2 + 106, i);
  108. }
  109. glEnd();
  110. //значения на y
  111. glColor3f(0, 0, 0);
  112. char values[5] = "";
  113. for (int i = 0, k = 0; k <= 10; i += stepy, k++) {
  114. sprintf_s(values, "%d", k);
  115. if (k == 10)PrintText(-width / 2 + 70, i - 205, "1");
  116. else {
  117. PrintText(-width / 2 + 70, i - 205, "0,");
  118. int j = strlen(values);
  119. for (int i = 0; i < j; i++)
  120. {
  121. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, values[i]);
  122. }
  123. }
  124. }
  125. }
  126. void Enable2D(int width, int height)
  127. {
  128. glViewport(0, 0, width, height);
  129. glMatrixMode(GL_PROJECTION);
  130. glLoadIdentity();
  131. glOrtho(-width / 2.0f, width / 2.0f, -height / 2.0f, height / 2.0f, 0.0f, 1.0f);
  132. glMatrixMode(GL_MODELVIEW);
  133. glLoadIdentity();
  134. }
  135. //Подпрограмма, показывающая текст на экране (для расположения координат и названий осей графиков)
  136. void PrintText(float x, float y, string string)
  137. {
  138. char* text = new char[string.length()];
  139. glColor3f(0, 0, 0);
  140. glRasterPos2f(x, y);
  141. for (int i = 0; i < string.length(); i++)
  142. text[i] = string[i];
  143. for (int i = 0; i < string.length(); i++)
  144. {
  145. glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, text[i]);
  146. x += 2;
  147. }
  148. delete[] text;
  149. }
  150. int main(int argc, char** argv)
  151. {
  152. // Initialize opengl (via glut)
  153. glutInit(&argc, argv); // инициализация GLUT
  154. glutInitWindowPosition(0, 300);
  155. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  156. glutInitWindowSize(width, height);// окно размера width х height
  157. glutCreateWindow("Axes");//создание окна
  158. glutDisplayFunc(Draw);
  159. Init();
  160. // регистрация обратных вызовов
  161. // Основной цикл GLUT
  162. glutMainLoop();
  163. delete[] massi;
  164. delete[] massi1;
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement