Example #1
0
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;
}
Example #2
0
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;
}