欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++矩阵相乘的初始值问题

程序员文章站 2022-04-04 20:50:01
...

相信很多人在二维数组相乘的时候发现了值出错的问题 其实是很小的问题。原因在于我们在使用+=的时候第一次循环的时候数组的值是空造成+=的时候第一个数据是指针造成程序错误;
当一个矩阵使用+=的时候一定要注意初始值
如果不给初值第一个数组+=的时候回乱造成混乱

void CMFCApplication1View::OnCad32771()
{

CClientDC *pDC;
pDC = new CClientDC(this);
double point[4][2] = { { 100, 300 }, { 100, 150, }, { 400, 50 }, { 600, 300 } };
double  bezier[4][4] = { { -1, 3, -3, 1 }, { 3, -6, 3, 0 }, { -3, 3, 0, 0 }, { 1, 0, 0, 0 } };
double mid[4][2];
pDC->MoveTo(point[0][0], point[0][1]);
for (int i = 1; i < 4; i++){
    pDC->LineTo(point[i][0], point[i][1]);
}
pDC->MoveTo(point[0][0], point[0][1]);

for (int i = 0; i<4; i++){
    for (int j = 0; j<2; j++){
        double m = 0;//这样就可以避免数组的初值是空的
        for (int k = 0; k<4; k++){

            m += (bezier[i][k] * point[k][j]);
        }
        mid[i][j] = m;//使用给了初值的m来+= 在进行接收;

    }

}
for (double t = 0.00; t <= 1.0; t += 0.01)
{
    double fin[2];
    double tt[1][4] = { t*t*t, t*t, t, 1 };
    for (int i = 0; i < 2; i++){
        double m = 0;
        for (int j = 0; j < 4; j++){
            m+=tt[0][j] * mid[j][i];
        }
        fin[i] = m;
    }
    pDC->LineTo(fin[0], fin[1]);
}

}