Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void AddPoint(float cX, float cY) {
- cX = 2.0f * cX / windowWidth - 1; // flip y axis
- cY = 1.0f - 2.0f * cY / windowHeight;
- glBindBuffer(GL_ARRAY_BUFFER, vbo);
- if (nVertices >= 10000) return;
- vec4 wVertex = vec4(cX, cY, 0, 1) * camera.Pinv() * camera.Vinv();
- // fill interleaved data
- vertexData[5 * nVertices] = wVertex.v[0];
- vertexData[5 * nVertices + 1] = wVertex.v[1];
- vertexData[5 * nVertices + 2] = 1; // red
- vertexData[5 * nVertices + 3] = 1; // green
- vertexData[5 * nVertices + 4] = 0; // blue
- nVertices++;
- // copy data to the GPU
- glBufferData(GL_ARRAY_BUFFER, nVertices * 5 * sizeof(float), vertexData, GL_DYNAMIC_DRAW);
- }
- void Draw() {
- if (nVertices > 0) {
- mat4 VPTransform = camera.V() * camera.P();
- int location = glGetUniformLocation(shaderProgram, "MVP");
- if (location >= 0) glUniformMatrix4fv(location, 1, GL_TRUE, VPTransform);
- else printf("uniform MVP cannot be set\n");
- glBindVertexArray(vao);
- glDrawArrays(GL_LINE_STRIP, 0, nVertices);
- }
- }
- };
- LineStrip lineStrip;
- class Lagrange {
- std::vector<vec2> MainPontok;
- int nPoints = 10;
- public:
- void AddPoint(float x, float y) {
- MainPontok.push_back(vec2(x,y));
- }
- void Addteszt() {
- MainPontok.push_back(vec2(-9, 5));
- MainPontok.push_back(vec2(-4, 2));
- MainPontok.push_back(vec2(-1, -2));
- MainPontok.push_back(vec2(7, 9));
- calculatePontteszt();
- }
- void calculatePontteszt()
- {
- for (float i = -9; i < 7; i+=0.1)
- {
- lineStrip.AddPoint(i,L(i));
- }
- }
- void PointMagic() {
- float cX; float cY;
- for (size_t i = 1; i < MainPontok.size(); i++)
- {
- float egyseg=MainPontok[i].x - MainPontok[i - 1].x / nPoints;
- for (int j = 0; j < nPoints; j++)
- {
- lineStrip.AddPoint(MainPontok[i].x + (j*egyseg), L(MainPontok[i].x + (j*egyseg)));
- }
- }
- }
- float L(float x) {
- float ret = 0;
- for (size_t i = 0; i < MainPontok.size(); i++)
- {
- ret += kisL(x, i)*MainPontok[i].y;
- }
- printf("%f\t%f\n", x, ret);
- return ret;
- }
- float kisL(float x, int j) {
- float ret = 1;
- for (size_t i = 0; i < MainPontok.size(); i++)
- {
- if (i != j)
- {
- ret *= (x - MainPontok[i].x) / (MainPontok[j].x - MainPontok[i].x);
- }
- }
- return ret;
- }
- /*void WritePoints() {
- for (size_t i = 0; i < AllPoint.size(); i++)
- {
- printf("%f\t%f\n", AllPoint[i].x, AllPoint[i].y);
- }
- }*/
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement