2013-08-28 5 views
0

Я хотел бы использовать класс Matlab delaunayTriangulation для построения триангуляции набора точек в 3D, матрице P [nx3], в пределах mex-функции.Использование встроенного класса Matlab 'delaunayTriangulation' в mex

В 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"); 

.... 

} 

Это правильный путь? Кроме того, если приведенный выше код прав, как мне получить доступ к свойствам класса (Points, ConnectivityList) из вывода mxArray * DT?

Благодаря

Edit: Измененные DT на &DT корректность в коде выше. Кроме того, на основании решения Сэма, я был в состоянии получить доступ к свойству (например, «ConnectivityList») следующий код:

mxArray* variable_name = mxGetProperty(DT,0,"ConnectivityList");

ответ

0

Вы должны быть в состоянии использовать mxGetProperty для доступа к свойствам объекта в mxArray.

+0

Thanks Sam! Это работает. Кроме того, я только что понял в приведенном выше коде: 'mexCallMATLAB (1, DT, 1, & P," delaunayTriangulation ");' следует заменить на 'mexCallMATLAB (1, & DT, 1, & P," delaunayTriangulation ");' – yellowmattercustard

+0

@ yellowmattercustard, если ответ работает для вас, отметьте его как принятый, нажав кнопку галочки слева от ответа. Это помогает другим пользователям найти ответ. Кроме того, вы можете изменить свой вопрос, чтобы внести изменения в свой код, который вы упомянули. –

Смежные вопросы