• API
• FAQ
• Tools
• Archive
SHARE
TWEET

Untitled

a guest Dec 11th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
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);
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 матрицы
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);
229.     glMatrixMode(GL_MODELVIEW);
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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!

Top