Advertisement
ElenaMednikova

Untitled

Dec 11th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <list>
  3. #include<cmath>
  4. #include <algorithm>
  5. #include <ctime>
  6.  
  7. #include <GL/glut.h>
  8. #include <GL/gl.h>
  9. #include <GL/glu.h>
  10.  
  11. using namespace std;
  12. int SOME_TIMER_ANG = 16;
  13. bool TIMER_IS_ON = false;
  14.  
  15. double scale = 1.0;
  16.  
  17. void render_square(double x, double y) {
  18.     glPushMatrix();
  19.  
  20.     double dx = 0.5;
  21.     double dy = 0.5;
  22.     glBegin(GL_POLYGON);
  23.     glVertex2f(x, y);
  24.     glVertex2f(x + dx, y);
  25.     glVertex2f(x + dx, y - dy);
  26.     glVertex2f(x, y - dy);
  27.     glEnd();
  28.     glPopMatrix();
  29. }
  30.  
  31. void draw_line(double x, double y, double x1, double y1) {
  32.     glBegin(GL_LINES);
  33.     glVertex2d(x, y);
  34.     glVertex2d(x1, y1);
  35.     glEnd();
  36. }
  37. void draw_rectangle(float cx, float cy,float r){
  38.  
  39.     double da=2*M_PI/360;
  40.     for(double angle=0;angle<=2* M_PI;angle += da){
  41.         double x=r * cos(angle);
  42.         double y=r * sin(angle);
  43.         double angle2 = angle+da;
  44.         if(angle2 > 2*M_PI){
  45.             angle2=2* M_PI;
  46.         }
  47.  
  48.         double x1=r * cos(angle2);
  49.         double y1=r * sin(angle2);
  50.  
  51.         draw_line(x + cx, y + cy, x1 + cx, y1 + cy);
  52.     }
  53.     double dg=2*M_PI/12;
  54.         for(double angle=0;angle<=2* M_PI;angle += dg){
  55.             double x=r * cos(angle);
  56.             double y=r * sin(angle);
  57.             double x0=r*0.8 * cos(angle);
  58.             double y0=r*0.8 * sin(angle);
  59.  
  60.  
  61.  
  62.  
  63.             draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
  64. }
  65.         double dr=2*M_PI/60;
  66.             for(double angle=0;angle<=2* M_PI;angle += dr){
  67.                 double x=r * cos(angle);
  68.                 double y=r * sin(angle);
  69.                 double x0=r*0.9 * cos(angle);
  70.                 double y0=r*0.9 * sin(angle);
  71.  
  72.  
  73.  
  74.  
  75.                 draw_line(x + cx, y + cy, x0 + cx, y0 + cy);
  76.     }
  77.  
  78. }
  79.  
  80. double sx=0;
  81. double sy=0;
  82. double sx1=0;
  83. double sy1=0;
  84. //
  85. double DX = 0;
  86. double DY = 0;
  87. //
  88.  
  89. void draw_arrows(float cx, float cy, float r, float sec_angle, float min_angle) {
  90.      float r_sec = 0.7 * r;
  91.      float r_min = 0.5 * r;
  92.      //
  93.      float minute_x = r_min * cos(min_angle);
  94.      float minute_y = r_min * sin(min_angle);
  95.      //
  96.      float seconds_x = r_sec * cos(sec_angle);
  97.      float seconds_y = r_sec * sin(sec_angle);
  98.      //
  99.      draw_line(cx, cy, cx + minute_x, cy + minute_y);
  100.      draw_line(cx, cy, cx + seconds_x, cy + seconds_y);
  101. }
  102. struct vector2d{
  103. float x,y;
  104.     void show(){
  105.         cout<<x<<' '<<y<<endl;
  106.     }
  107.     vector2d (float x_, float y_){
  108.     x=x_;
  109.     y=y_;
  110.     }
  111.     vector2d add(vector2d b){
  112.         return vector2d (x+b.x,y+b.y);
  113.     void
  114.     float dot(vector2d b){
  115.             return x*b.x + y*b.y;
  116.     }
  117.     vector2d mul(float t){
  118.             return vector2d(x*t,y*t);
  119.     }
  120.     void line (){
  121.         draw_line(0,0,x,y);
  122.     }
  123.         }
  124. };
  125. void Render() {
  126.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  127.         glLoadIdentity();
  128.         glTranslatef(0, 0, -10);
  129.         glColor3d(1, 1, 1);
  130.         glScalef(scale, scale, scale);
  131.  
  132.         vector2d i(3.6);
  133.         i.line();
  134.         vector2d j(6,-3);
  135.         j.line()
  136.         cur_time = time(NULL);
  137.         dt=0;
  138.         minute_t = 0;
  139.         if (TIMER_IS_ON){
  140.             dt=cur_time - start_time;
  141.             minute_t = dt/60;
  142.         }
  143.  
  144.         draw_arrows(1, 1, 3, M_PI/2-dangle*dt, M_PI/2-dangle*minute_t);
  145.         glFlush();
  146. }
  147.  
  148. void update(int t) {
  149.     Render();
  150.     glutTimerFunc(50, update, 0);
  151. }
  152.  
  153. void keyb(unsigned char key, int x, int y ) {
  154.     if(key == 'a') {
  155.         DX = 0;
  156.         TIMER_IS_ON = ! TIMER_IS_ON;
  157.         std::cout << "A IS PRESSED " << TIMER_IS_ON << std::endl;
  158.     }
  159.     if(key == 'd') {
  160.         DX += 0.2;
  161.     }
  162.     if(key == 'w') {
  163.         DY += 0.2;
  164.     }
  165.     if(key == 's') {
  166.         DY -= 0.2;
  167.     }
  168.  
  169.  
  170.     Render();
  171. }
  172.  
  173. void reshape(int w, int h) {
  174.  
  175.     // предупредим деление на ноль
  176.     // если окно сильно перетянуто будет
  177.     if(h == 0)
  178.         h = 1;
  179.     float ratio = 1.0* w / h;
  180.  
  181.     // используем матрицу проекции
  182.     glMatrixMode(GL_PROJECTION);
  183.  
  184.         // Reset матрицы
  185.     glLoadIdentity();
  186.  
  187.     // определяем окно просмотра
  188.     glViewport(0, 0, w, h);
  189.  
  190.     // установить корректную перспективу.
  191.     gluPerspective(45,ratio,1,1000);
  192.  
  193.     // вернуться к модели
  194.     glMatrixMode(GL_MODELVIEW);
  195. }
  196.  
  197. int main(int argc, char **argv)
  198. {
  199.     vector2d v(1,2);
  200.     vector2d c(3,4);
  201.     vector2d d(0,0);
  202.     d = v.add(c);
  203.     vector2d j(3,4);
  204.     vector2d i(0,0);
  205.     d=v.add(c);
  206.     d.show();
  207.     float dot_result = i.dot(j);
  208.     cout <<dot_result<< endl;
  209.     c.show();
  210.     vector2d mul_result = c.mul(2);
  211.     mul_result.show();
  212.  
  213.     time_t cur_time=time(NULL);
  214.     static time_t start_t=time(NULL);
  215.     glutInit(&argc, argv);
  216.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  217.     glutInitWindowSize(800, 600);
  218.     glutCreateWindow("Physics Engine");
  219.     glEnable(GL_DEPTH_TEST);
  220.     glMatrixMode(GL_PROJECTION);
  221.     glLoadIdentity();
  222.     glMatrixMode(GL_MODELVIEW);
  223.     glLoadIdentity();
  224.     glClearColor(0., 0.0, 128.0, 0.0);
  225.  
  226.     glutTimerFunc(50, update, 0);
  227.     glutReshapeFunc(reshape);
  228.     glutDisplayFunc(Render);
  229.     glutKeyboardFunc(keyb);
  230.     glutMainLoop();
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement