Advertisement
Guest User

Untitled

a guest
Mar 25th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1.  
  2.     void AddPoint(float cX, float cY) {
  3.         cX = 2.0f * cX / windowWidth - 1;    // flip y axis
  4.         cY = 1.0f - 2.0f * cY / windowHeight;
  5.         glBindBuffer(GL_ARRAY_BUFFER, vbo);
  6.         if (nVertices >= 10000) return;
  7.  
  8.         vec4 wVertex = vec4(cX, cY, 0, 1) * camera.Pinv() * camera.Vinv();
  9.         // fill interleaved data
  10.         vertexData[5 * nVertices] = wVertex.v[0];
  11.         vertexData[5 * nVertices + 1] = wVertex.v[1];
  12.         vertexData[5 * nVertices + 2] = 1; // red
  13.         vertexData[5 * nVertices + 3] = 1; // green
  14.         vertexData[5 * nVertices + 4] = 0; // blue
  15.         nVertices++;
  16.         // copy data to the GPU
  17.         glBufferData(GL_ARRAY_BUFFER, nVertices * 5 * sizeof(float), vertexData, GL_DYNAMIC_DRAW);
  18.     }
  19.  
  20.     void Draw() {
  21.         if (nVertices > 0) {
  22.             mat4 VPTransform = camera.V() * camera.P();
  23.  
  24.             int location = glGetUniformLocation(shaderProgram, "MVP");
  25.             if (location >= 0) glUniformMatrix4fv(location, 1, GL_TRUE, VPTransform);
  26.             else printf("uniform MVP cannot be set\n");
  27.  
  28.             glBindVertexArray(vao);
  29.             glDrawArrays(GL_LINE_STRIP, 0, nVertices);
  30.         }
  31.     }
  32. };
  33. LineStrip lineStrip;
  34.  
  35. class Lagrange {
  36.     std::vector<vec2> MainPontok;
  37.  
  38.     int nPoints = 10;
  39.  
  40. public:
  41.  
  42.     void AddPoint(float x, float y) {
  43.         MainPontok.push_back(vec2(x,y));
  44.    
  45.    
  46.     }
  47.  
  48.     void Addteszt() {
  49.  
  50.         MainPontok.push_back(vec2(-9, 5));
  51.         MainPontok.push_back(vec2(-4, 2));
  52.         MainPontok.push_back(vec2(-1, -2));
  53.         MainPontok.push_back(vec2(7, 9));
  54.         calculatePontteszt();
  55.  
  56.     }
  57.  
  58.     void calculatePontteszt()
  59.     {
  60.    
  61.         for (float i = -9; i < 7; i+=0.1)
  62.         {
  63.             lineStrip.AddPoint(i,L(i));
  64.         }
  65.        
  66.  
  67.  
  68.     }
  69.  
  70.     void PointMagic() {
  71.         float cX; float cY;
  72.         for (size_t i = 1; i < MainPontok.size(); i++)
  73.         {
  74.             float egyseg=MainPontok[i].x - MainPontok[i - 1].x / nPoints;
  75.             for (int j = 0; j < nPoints; j++)
  76.             {
  77.  
  78.                
  79.                 lineStrip.AddPoint(MainPontok[i].x + (j*egyseg), L(MainPontok[i].x + (j*egyseg)));
  80.  
  81.             }
  82.         }
  83.    
  84.     }
  85.  
  86.  
  87.  
  88.  
  89.     float   L(float x) {
  90.         float ret = 0;
  91.         for (size_t i = 0; i < MainPontok.size(); i++)
  92.         {
  93.             ret += kisL(x, i)*MainPontok[i].y;
  94.  
  95.         }
  96.         printf("%f\t%f\n", x, ret);
  97.         return ret;
  98.     }
  99.  
  100.     float kisL(float x, int j) {
  101.         float ret = 1;
  102.         for (size_t i = 0; i < MainPontok.size(); i++)
  103.         {
  104.             if (i != j)
  105.             {
  106.                 ret *= (x - MainPontok[i].x) / (MainPontok[j].x - MainPontok[i].x);
  107.             }
  108.  
  109.         }
  110.         return ret;
  111.  
  112.     }
  113.  
  114.  
  115.     /*void WritePoints() {
  116.         for (size_t i = 0; i < AllPoint.size(); i++)
  117.         {
  118.             printf("%f\t%f\n", AllPoint[i].x, AllPoint[i].y);
  119.  
  120.         }
  121.  
  122.  
  123.     }*/
  124. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement