当前位置:编程学习 > Matlab >>

谁能告诉我以下代码是干嘛用的啊(matlab语言)

#include "mex.h" //系统头文件 #define Index(i,j,R,C) ((j)*(R)+(i)) void DeQ(int *Qx, int *Qy, int *head, int *x, int *y) { *x = Qx[*head]; *y = Qy[*head]; *head = *head + 1; } void EnQ(int *Qx, int *Qy, int x, int y, int *tail) { Qx[*tail] = x; Qy[*tail] = y; *tail = *tail + 1; } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { double *Contour; int DimContour[2]; int i, j, k; int ii, jj; int H, W; double *mask; int *Qx, *Qy, head, tail; int Dx[4] = {-1,1,0,0}; int Dy[4] = {0,0,-1,1}; int x, y, cx, cy; Contour = mxGetPr(prhs[0]); DimContour[0] = mxGetM(prhs[0]); DimContour[1] = mxGetN(prhs[0]); H = (int)mxGetScalar(prhs[1]); W = (int)mxGetScalar(prhs[2]); /* Set the output pointer to the output matrix. */ plhs[0] = mxCreateDoubleMatrix(H, W, mxREAL); /* Create a C pointer to a copy of the output matrix. */ mask = mxGetPr(plhs[0]); Qx = (int *)malloc(sizeof(int)*H*W); Qy = (int *)malloc(sizeof(int)*H*W); head = 0; tail = 0; //printf("%d %d", H, W); for(i=0;i<H;i++) for(j=0;j<W;j++) mask[Index(i,j,H,W)] = -1; for(i=0;i<DimContour[0];i++) { ii = Contour[Index(i,0,DimContour[0],DimContour[1])]; jj = Contour[Index(i,1,DimContour[0],DimContour[1])]; mask[Index(jj-1,ii-1, H, W)] = 1; } EnQ(Qx, Qy, 0, 0, &tail); mask[Index(0,0,H,W)] = 1; while(head != tail) { DeQ(Qx, Qy, &head, &x, &y); for(i=0;i<4;i++) { cx = x + Dx[i]; cy = y + Dy[i]; if (cx>=0 && cx<W && cy>=0 && cy<H) { if(mask[Index(cy, cx, H, W)] == -1) { mask[Index(cy, cx, H, W)] = 1; EnQ(Qx, Qy, cx, cy, &tail); } } } } }
答案:这不是matlab语言,是C语言写的mex代码

MEX从字面上是MATLAB和Excutable 两个单词的缩写。  
  .MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是dll文件。

MEX文件实现了一种C语言与MATLAB的接口,通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。

MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。 

=========================================
想详细了解相关内容可以看这本书,参考资料里是百科链接:
《MATLAB与C/C++混合编程》由张亮等所著,本书介绍了使用MATLAB与C/C++语言进行混合编程的各种接口和技术,主要内容包括使用C/C++语言调用MATLAB引擎进行混合编程,使用MAT文件实现MATLAB和C/C++语言的数据共享,使用C/C++语言编写C-MEX文件供MATLAB调用,在C/C++中使用COM组件和MATLAB编译器等。

上一个:请大牛按照图片结果输出格式帮我写下matlab源代码,谢谢了
下一个:请求 哈夫曼编码 matlab源代码

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,