Advertisement
Guest User

Untitled

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