ARFloat Tracker::arGetTransMat3(ARFloat rot[3][3], ARFloat ppos2d[][2], ARFloat ppos3d[][2], int num, ARFloat conv[3][4], Camera *pCam) //ARFloat *dist_factor, ARFloat cpara[3][4] ) { ARFloat off[3], pmax[3], pmin[3]; ARFloat ret; int i; pmax[0] = pmax[1] = pmax[2] = -10000000000.0; pmin[0] = pmin[1] = pmin[2] = 10000000000.0; for (i = 0; i < num; i++) { if (ppos3d[i][0] > pmax[0]) pmax[0] = ppos3d[i][0]; if (ppos3d[i][0] < pmin[0]) pmin[0] = ppos3d[i][0]; if (ppos3d[i][1] > pmax[1]) pmax[1] = ppos3d[i][1]; if (ppos3d[i][1] < pmin[1]) pmin[1] = ppos3d[i][1]; /* if( ppos3d[i][2] > pmax[2] ) pmax[2] = ppos3d[i][2]; if( ppos3d[i][2] < pmin[2] ) pmin[2] = ppos3d[i][2]; */ } off[0] = -(pmax[0] + pmin[0]) * (ARFloat) 0.5; off[1] = -(pmax[1] + pmin[1]) * (ARFloat) 0.5; off[2] = -(pmax[2] + pmin[2]) * (ARFloat) 0.5; for (i = 0; i < num; i++) { pos3d[i][0] = ppos3d[i][0] + off[0]; pos3d[i][1] = ppos3d[i][1] + off[1]; /* pos3d[i][2] = ppos3d[i][2] + off[2]; */ pos3d[i][2] = 0.0; } ret = arGetTransMatSub(rot, ppos2d, pos3d, num, conv, pCam); //dist_factor, cpara ); conv[0][3] = conv[0][0] * off[0] + conv[0][1] * off[1] + conv[0][2] * off[2] + conv[0][3]; conv[1][3] = conv[1][0] * off[0] + conv[1][1] * off[1] + conv[1][2] * off[2] + conv[1][3]; conv[2][3] = conv[2][0] * off[0] + conv[2][1] * off[1] + conv[2][2] * off[2] + conv[2][3]; return ret; }
double arGetTransMat3( double rot[3][3], double ppos2d[][2], double ppos3d[][2], int num, double conv[3][4], double *dist_factor, double cpara[3][4] ) { double off[3], pmax[3], pmin[3]; double ret; int i; pmax[0]=pmax[1]=pmax[2] = -10000000000.0; pmin[0]=pmin[1]=pmin[2] = 10000000000.0; for( i = 0; i < num; i++ ) { if( ppos3d[i][0] > pmax[0] ) pmax[0] = ppos3d[i][0]; if( ppos3d[i][0] < pmin[0] ) pmin[0] = ppos3d[i][0]; if( ppos3d[i][1] > pmax[1] ) pmax[1] = ppos3d[i][1]; if( ppos3d[i][1] < pmin[1] ) pmin[1] = ppos3d[i][1]; /* if( ppos3d[i][2] > pmax[2] ) pmax[2] = ppos3d[i][2]; if( ppos3d[i][2] < pmin[2] ) pmin[2] = ppos3d[i][2]; */ } off[0] = -(pmax[0] + pmin[0]) / 2.0; off[1] = -(pmax[1] + pmin[1]) / 2.0; off[2] = -(pmax[2] + pmin[2]) / 2.0; for( i = 0; i < num; i++ ) { pos3d[i][0] = ppos3d[i][0] + off[0]; pos3d[i][1] = ppos3d[i][1] + off[1]; /* pos3d[i][2] = ppos3d[i][2] + off[2]; */ pos3d[i][2] = 0.0; } ret = arGetTransMatSub( rot, ppos2d, pos3d, num, conv, dist_factor, cpara ); conv[0][3] = conv[0][0]*off[0] + conv[0][1]*off[1] + conv[0][2]*off[2] + conv[0][3]; conv[1][3] = conv[1][0]*off[0] + conv[1][1]*off[1] + conv[1][2]*off[2] + conv[1][3]; conv[2][3] = conv[2][0]*off[0] + conv[2][1]*off[1] + conv[2][2]*off[2] + conv[2][3]; return ret; }