Daniel@0: Daniel@0: #include "mex.h" Daniel@0: #include Daniel@0: Daniel@0: #define MAX(x,y) ((x)>(y) ? (x) : (y)) Daniel@0: #define MIN(x,y) ((x)<(y) ? (x) : (y)) Daniel@0: Daniel@0: void mexFunction( Daniel@0: int nlhs, mxArray *plhs[], Daniel@0: int nrhs, const mxArray *prhs[] Daniel@0: ) Daniel@0: { Daniel@0: int j,k,m,n,nzmax,*irs,*jcs, *irs2, *jcs2; Daniel@0: double *overlap, *overlap2, tmp, areaA, areaB; Daniel@0: double *leftA, *rightA, *topA, *bottomA; Daniel@0: double *leftB, *rightB, *topB, *bottomB; Daniel@0: double *verbose; Daniel@0: Daniel@0: m = MAX(mxGetM(prhs[0]), mxGetN(prhs[0])); Daniel@0: n = MAX(mxGetM(prhs[4]), mxGetN(prhs[4])); Daniel@0: /* printf("A=%d, B=%d\n", m, n); */ Daniel@0: Daniel@0: leftA = mxGetPr(prhs[0]); Daniel@0: rightA = mxGetPr(prhs[1]); Daniel@0: topA = mxGetPr(prhs[2]); Daniel@0: bottomA = mxGetPr(prhs[3]); Daniel@0: Daniel@0: leftB = mxGetPr(prhs[4]); Daniel@0: rightB = mxGetPr(prhs[5]); Daniel@0: topB = mxGetPr(prhs[6]); Daniel@0: bottomB = mxGetPr(prhs[7]); Daniel@0: Daniel@0: verbose = mxGetPr(prhs[8]); Daniel@0: Daniel@0: plhs[0] = mxCreateDoubleMatrix(m,n, mxREAL); Daniel@0: overlap = mxGetPr(plhs[0]); Daniel@0: Daniel@0: plhs[1] = mxCreateDoubleMatrix(m,n, mxREAL); Daniel@0: overlap2 = mxGetPr(plhs[1]); Daniel@0: Daniel@0: k = 0; Daniel@0: for (j = 0; (j < n); j++) { Daniel@0: int i; Daniel@0: for (i = 0; (i < m); i++) { Daniel@0: tmp = (MAX(0, MIN(rightA[i], rightB[j]) - MAX(leftA[i], leftB[j]) )) * Daniel@0: (MAX(0, MIN(topA[i], topB[j]) - MAX(bottomA[i], bottomB[j]) )); Daniel@0: Daniel@0: if (tmp > 0) { Daniel@0: overlap[k] = tmp; Daniel@0: Daniel@0: areaA = (rightA[i]-leftA[i])*(topA[i]-bottomA[i]); Daniel@0: areaB = (rightB[j]-leftB[j])*(topB[j]-bottomB[j]); Daniel@0: overlap2[k] = tmp/MIN(areaA, areaB); Daniel@0: Daniel@0: if (*verbose) { Daniel@0: printf("j=%d,i=%d,overlap=%5.3f, norm=%5.3f\n", j,i, overlap[k], overlap2[k]); Daniel@0: } Daniel@0: } Daniel@0: Daniel@0: k++; Daniel@0: } Daniel@0: } Daniel@0: } Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: Daniel@0: