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