0

我正在使用这个网站来了解如何在矩阵形式的数学标题下计算 Hermite 曲线以制作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 循环是Sh相乘。然后就像网站说的那样,第二个内部嵌套 for 循环将前面矩阵乘法的结果与C相乘。

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

4

0 回答 0