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

来源:互联网 发布:淘宝里面主播挣多少钱 编辑:程序博客网 时间:2024/06/05 22:59

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

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]);}

}

0 0