Advertisement
Guest User

Untitled

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