Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1.  
  2. #include "Render.h"
  3. #include "math.h"  
  4. #include <Windows.h>
  5. #include <GL\GL.h>
  6. #include <GL\GLU.h>
  7.  
  8. double P1[] = { 3.1, 5.4, 5.6 };
  9. double P2[] = { 1.4, 6.8, 0.2 };
  10. double P3[] = { 0.7, 3.5, 7.7 };
  11. double P4[] = { 6.6, 2.6, 0.7 };
  12. double angleX = 0;
  13. int ind = 1;
  14. int i = 0;
  15. int flag = 0;
  16. void cube()
  17. {
  18.     glBegin(GL_QUADS);
  19.     glVertex3d(0, 0, 0);
  20.     glVertex3d(0, 0, 1);
  21.     glVertex3d(0, 1, 1);
  22.     glVertex3d(0, 1, 0);
  23.  
  24.     glVertex3d(0, 0, 0);
  25.     glVertex3d(0, 1, 0);
  26.     glVertex3d(1, 1, 0);
  27.     glVertex3d(1, 0, 0);
  28.  
  29.     glVertex3d(0, 0, 0);
  30.     glVertex3d(0, 0, 1);
  31.     glVertex3d(1, 0, 1);
  32.     glVertex3d(1, 0, 0);
  33.  
  34.     glVertex3d(2, 1, 0);
  35.     glVertex3d(0, 0, 1);
  36.     glVertex3d(1, 1, 1);
  37.     glVertex3d(1, 1, 0);
  38.  
  39.     glVertex3d(2, 0, 0);
  40.     glVertex3d(1, 0, 1);
  41.     glVertex3d(1, 1, 1);
  42.     glVertex3d(1, 1, 0);
  43.  
  44.     glVertex3d(2, 0, 1);
  45.     glVertex3d(0, 1, 1);
  46.     glVertex3d(1, 1, 1);
  47.     glVertex3d(1, 0, 1);
  48.     glEnd();
  49. }
  50.  
  51. inline double Bf(double p0, double p1, double p2, double p3, double t)
  52. {
  53.     return p0 * (1 - t) * (1 - t) * (1 - t) + 3 * p1 * t * (1 - t) * (1 - t) + 3 * p2 * t * t * (1 - t) + p3 * t * t * t;
  54. }
  55.  
  56.  
  57. double UgolX(double x0, double x1, double x2, double y0, double y1, double y2, double z0, double z1, double z2)
  58. {
  59.     double D[4];
  60.     D[0] = sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1) + (z0 - z1) * (z0 - z1));
  61.     D[1] = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1));
  62.     D[2] = sqrt((x0 - x2) * (x0 - x2) + (y0 - y2) * (y0 - y2) + (z0 - z2) * (z0 - z2));
  63.     D[3] = acos((D[0] * D[0] - D[2] * D[2] + D[1] * D[1]) / (2 * D[0] * D[1]));
  64.     return 180 - (180 * D[3]);
  65.  
  66.  
  67. }
  68.  
  69. double t_max = 0;
  70. void Render(double delta_time)
  71. {
  72.     t_max += ind * (delta_time);
  73.     if (t_max > 1)
  74.         ind = -1;
  75.     else if (t_max <= 0)
  76.         ind = 1;
  77.  
  78.     double* P = new double[3];
  79.     double x[101];
  80.     double y[101];
  81.     double z[101];
  82.  
  83.     /*glBegin(GL_LINES);
  84.     glVertex3dv(P1);
  85.     glVertex3dv(P2);
  86.     glVertex3dv(P2);
  87.     glVertex3dv(P3);
  88.     glVertex3dv(P3);
  89.     glVertex3dv(P4);
  90.     glEnd();
  91.     glLineWidth(1);
  92.     glColor3d(0, 1, 0);*/
  93.     int j = 0;
  94.     glBegin(GL_LINE_STRIP);
  95.     for (double t = 0; t <= 1.001; t += 0.01)
  96.     {
  97.         P[0] = Bf(P1[0], P2[0], P3[0], P4[0], t);
  98.         x[j] = P[0];
  99.         P[1] = Bf(P1[1], P2[1], P3[1], P4[1], t);
  100.         y[j] = P[1];
  101.         P[2] = Bf(P1[2], P2[2], P3[2], P4[2], t);
  102.         z[j] = P[2];
  103.         j++;
  104.         glVertex3dv(P);
  105.     }
  106.     j = 0;
  107.     glEnd();
  108.     glColor3d(0.3, 0.4, 0.2);
  109.     glPointSize(10);
  110.     P[0] = Bf(P1[0], P2[0], P3[0], P4[0], t_max);
  111.     P[1] = Bf(P1[1], P2[1], P3[1], P4[1], t_max);
  112.     P[2] = Bf(P1[2], P2[2], P3[2], P4[2], t_max);
  113.     glPushMatrix();
  114.     glTranslated(P[0], P[1], P[2]);
  115.  
  116.     angleX = UgolX(x[i], x[i + 1], x[i + 2], y[i], y[i + 1], y[i + 2], z[i], z[i + 1], z[i + 2]);
  117.     glRotated(angleX, ((y[i + 1] - y[i])*(z[i + 2] - z[i]) - (z[i + 1] - z[i])*(y[i + 2] - y[i])), ((x[i + 1] - x[i]) * (z[i + 2] - z[i]) - (z[i + 1] - z[i]) * (x[i + 2] - x[i])), ((x[i + 1] - x[i]) * (y[i + 2] - y[i]) - (y[i + 1] - y[i]) * (x[i + 2] - x[i])));
  118.     i++;
  119.     Sleep(15);
  120.  
  121.     cube();
  122.     glPopMatrix();
  123.     if (i == 99) i = 0;
  124.     delete[] P;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement