谁能告诉我以下代码是干嘛用的啊(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源代码