我想使用 Matlab 的delaunayTriangulation类在 mex 函数中构建一组 3D 点 P [nx3 矩阵] 的三角剖分。
在 Matlab 中,
DT = delaunayTriangulation(P)
使用 'Points' 和 'ConnectivityList' 作为 DT 的类属性计算三角剖分。
如何在 mex 文件中执行相同的操作?
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) {
....
int n;
int elements = n*3;
double* P_ptr; /*contains 3D coordinates*/
P_ptr = mxMalloc(elements * sizeof(double));
/* fill up P_ptr with coordinates */
mxArray *DT, *P;
mxSetPr(P,P_ptr); /* Set P_ptr to mxArray P */
mxSetM(P, n);
mxSetN(P, 3);
mexCallMATLAB(1, &DT, 1, &P, "delaunayTriangulation");
....
}
这是正确的方法吗?另外,如果上面的代码是正确的,我如何从输出 mxArray *DT 访问类属性(Points,ConnectivityList)?
谢谢
编辑:在上面的代码中更改DT
为&DT
正确性。此外,基于 Sam 的解决方案,我能够通过以下代码访问该属性(例如“ConnectivityList”):
mxArray* variable_name = mxGetProperty(DT,0,"ConnectivityList");