实现hermite曲线

时间:2014-05-08 12:45:30

标签: c++ opengl geometry

我在矩阵表格中的数学标题下使用this website on how to compute a hermite curve来制作 hermite曲线

到目前为止,这是我的代码......

// calculate hermite curve
    GLfloat S[4][1];
    GLfloat C[4][3] = {{height, 0, 0},
                       {0, radius, 0},
                       {0, 2 * radius, 0},
                       {-2 * height, 0, 0}};
    GLfloat h[4][4] = {{ 2,-2, 1, 1},
                       {-3, 3,-2,-1},
                       { 0, 0, 1, 0},
                       { 1, 0, 0, 0}};

    unsigned int rows;
    unsigned int cols;
    float val;
    for (int x = 0; x < l_vertices; x++) {
        float segment = (float)x / l_vertices;
        S[0][0] = pow(segment, 3);
        S[1][0] = pow(segment, 2);
        S[2][0] = pow(segment, 1);
        S[3][0] = 1;
        GLfloat midwayArray[4][4] = {{ 0, 0, 0, 0},
                                     { 0, 0, 0, 0},
                                     { 0, 0, 0, 0},
                                     { 0, 0, 0, 0}};
        GLfloat finalArray[4][1] = { 0, 0, 0, 0};
        rows = 4;
        cols = 4;
        for (unsigned int i = 0; i < rows; i++) {
            for (unsigned int j = 0; j < cols; j++) {
                for (unsigned int k = 0; k < 1; k++) {
                    val = S[i][k] * h[k][j];
                    midwayArray[i][j] += val; 
                }
            }
        }

        rows = 4;
        cols = 1;
        for (unsigned int i = 0; i < rows; i++) {
            for (unsigned int j = 0; j < cols; j++) {
                for (unsigned int k = 0; k < 4; k++) {
                    val = midwayArray[i][k] * C[k][j];
                    finalArray[i][j] += val;
                }
            }
        }
        profileCurve[0][x] = finalArray[0][0];
        profileCurve[1][x] = finalArray[1][0];
        profileCurve[2][x] = finalArray[2][0];
    }

但由于某种原因,我主要是零。我认为我的矩阵乘法没有正确完成。

此外,还有一些关于我的代码当前如何工作的信息。第一个内部嵌套for循环是将 S h 相乘,就像网站所说的那样。然后第二个内部嵌套for循环将前一个矩阵乘法的结果与 C 相乘,就像网站所说的那样。

我认为将x的迭代的最终数组的结果坐标分配给我的profileCurve数组,该数组将存储构成hermite曲线的所有坐标。

0 个答案:

没有答案