Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Render.h"
- #include "math.h"
- #include <Windows.h>
- #include <GL\GL.h>
- #include <GL\GLU.h>
- double P1[] = { 3.1, 5.4, 5.6 };
- double P2[] = { 1.4, 6.8, 0.2 };
- double P3[] = { 0.7, 3.5, 7.7 };
- double P4[] = { 6.6, 2.6, 0.7 };
- double angleX = 0;
- int ind = 1;
- int i = 0;
- int flag = 0;
- void cube()
- {
- glBegin(GL_QUADS);
- glVertex3d(0, 0, 0);
- glVertex3d(0, 0, 1);
- glVertex3d(0, 1, 1);
- glVertex3d(0, 1, 0);
- glVertex3d(0, 0, 0);
- glVertex3d(0, 1, 0);
- glVertex3d(1, 1, 0);
- glVertex3d(1, 0, 0);
- glVertex3d(0, 0, 0);
- glVertex3d(0, 0, 1);
- glVertex3d(1, 0, 1);
- glVertex3d(1, 0, 0);
- glVertex3d(2, 1, 0);
- glVertex3d(0, 0, 1);
- glVertex3d(1, 1, 1);
- glVertex3d(1, 1, 0);
- glVertex3d(2, 0, 0);
- glVertex3d(1, 0, 1);
- glVertex3d(1, 1, 1);
- glVertex3d(1, 1, 0);
- glVertex3d(2, 0, 1);
- glVertex3d(0, 1, 1);
- glVertex3d(1, 1, 1);
- glVertex3d(1, 0, 1);
- glEnd();
- }
- inline double Bf(double p0, double p1, double p2, double p3, double t)
- {
- 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;
- }
- double UgolX(double x0, double x1, double x2, double y0, double y1, double y2, double z0, double z1, double z2)
- {
- double D[4];
- D[0] = sqrt((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1) + (z0 - z1) * (z0 - z1));
- D[1] = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1));
- D[2] = sqrt((x0 - x2) * (x0 - x2) + (y0 - y2) * (y0 - y2) + (z0 - z2) * (z0 - z2));
- D[3] = acos((D[0] * D[0] - D[2] * D[2] + D[1] * D[1]) / (2 * D[0] * D[1]));
- return 180 - (180 * D[3]);
- }
- double t_max = 0;
- void Render(double delta_time)
- {
- t_max += ind * (delta_time);
- if (t_max > 1)
- ind = -1;
- else if (t_max <= 0)
- ind = 1;
- double* P = new double[3];
- double x[101];
- double y[101];
- double z[101];
- /*glBegin(GL_LINES);
- glVertex3dv(P1);
- glVertex3dv(P2);
- glVertex3dv(P2);
- glVertex3dv(P3);
- glVertex3dv(P3);
- glVertex3dv(P4);
- glEnd();
- glLineWidth(1);
- glColor3d(0, 1, 0);*/
- int j = 0;
- glBegin(GL_LINE_STRIP);
- for (double t = 0; t <= 1.001; t += 0.01)
- {
- P[0] = Bf(P1[0], P2[0], P3[0], P4[0], t);
- x[j] = P[0];
- P[1] = Bf(P1[1], P2[1], P3[1], P4[1], t);
- y[j] = P[1];
- P[2] = Bf(P1[2], P2[2], P3[2], P4[2], t);
- z[j] = P[2];
- j++;
- glVertex3dv(P);
- }
- j = 0;
- glEnd();
- glColor3d(0.3, 0.4, 0.2);
- glPointSize(10);
- P[0] = Bf(P1[0], P2[0], P3[0], P4[0], t_max);
- P[1] = Bf(P1[1], P2[1], P3[1], P4[1], t_max);
- P[2] = Bf(P1[2], P2[2], P3[2], P4[2], t_max);
- glPushMatrix();
- glTranslated(P[0], P[1], P[2]);
- 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]);
- 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])));
- i++;
- Sleep(15);
- cube();
- glPopMatrix();
- if (i == 99) i = 0;
- delete[] P;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement