void adjacency(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[]) { dd_PolyhedraPtr P; dd_ErrorType err; dd_MatrixPtr V; dd_SetFamilyPtr A; if (mxIsStruct(prhs[0])) { V = FT_get_V_MatrixPtr(prhs[0]); dd_set_global_constants(); /* First, this must be called. */ P = dd_DDMatrix2Poly(V, &err); /* compute the second representation */ if (err == dd_NoError) { A = dd_CopyInputAdjacency(P); plhs[0] = FT_set_SetFamilyPtr(A); dd_FreeSetFamily(A); } else { dd_WriteErrorMessages(stdout,err); mexErrMsgTxt("CDD returned an error, see above(!) for details"); } dd_FreeMatrix(V); dd_FreePolyhedra(P); } }
/* hull Compute convex hull of a set of points */ void hull(int nlhs, mxArray * plhs[], int nrhs, const mxArray * prhs[]) { dd_PolyhedraPtr P; dd_ErrorType err; dd_MatrixPtr H,V; dd_SetFamilyPtr GI,GA; if (nrhs == 1 && nlhs <= 2 && mxIsStruct(prhs[0])) { V = FT_get_V_MatrixPtr(prhs[0]); dd_set_global_constants(); /* First, this must be called. */ P = dd_DDMatrix2Poly(V, &err); /* compute the second representation */ if (err == dd_NoError) { H = dd_CopyInequalities(P); plhs[0] = FT_set_H_MatrixPtr(H); GI=dd_CopyIncidence(P); GA=dd_CopyInputAdjacency(P); plhs[1] = ZH_set_Vlist(GI,GA); dd_FreeSetFamily(GI); dd_FreeSetFamily(GA); dd_FreeMatrix(H); } else { dd_WriteErrorMessages(stdout,err); mexErrMsgTxt("CDD returned an error, see above(!) for details"); } dd_FreeMatrix(V); dd_FreePolyhedra(P); return; } else { mexErrMsgTxt("hull expects a V input struct and produces an H output struct"); } }
void allfacets2(int n_input, int d_input, double *g_input) /* output facets, incidences and adjacency */ { dd_PolyhedraPtr poly; dd_MatrixPtr A=NULL,G=NULL; dd_SetFamilyPtr AI=NULL, AA=NULL; dd_SetFamilyPtr GI=NULL, GA=NULL; dd_rowrange i,n; dd_colrange j,d; dd_ErrorType err; n=(dd_rowrange)n_input; d=(dd_colrange)d_input; G=dd_CreateMatrix(n,d); for (i=0; i<n; i++){ for (j=0; j<d; j++) dd_set_d(G->matrix[i][j],g_input[i*d+j]); } G->representation=dd_Generator; poly=dd_DDMatrix2Poly(G, &err); /* compute the second (inequality) representation */ if (err==dd_NoError){ A=dd_CopyInequalities(poly); AI=dd_CopyIncidence(poly); AA=dd_CopyAdjacency(poly); GI=dd_CopyInputIncidence(poly); GA=dd_CopyInputAdjacency(poly); MLPutFunction(stdlink,"List",5); dd_MLWriteMatrix(A); dd_MLWriteSetFamily(AI); dd_MLWriteSetFamily(AA); dd_MLWriteSetFamily(GI); dd_MLWriteSetFamily(GA); } else { dd_MLWriteError(poly); } dd_FreeMatrix(A); dd_FreeMatrix(G); dd_FreeSetFamily(AI); dd_FreeSetFamily(AA); dd_FreeSetFamily(GI); dd_FreeSetFamily(GA); }
void allvertices2(int m_input, int d_input, double *a_input) /* output vertices, incidences and adjacency */ { dd_PolyhedraPtr poly; dd_MatrixPtr A=NULL,G=NULL; dd_SetFamilyPtr GI=NULL,GA=NULL; dd_SetFamilyPtr AI=NULL,AA=NULL; dd_rowrange i,m; dd_colrange j,d; dd_ErrorType err; m=(dd_rowrange)m_input; d=(dd_colrange)d_input; A=dd_CreateMatrix(m,d); for (i=0; i<m; i++){ for (j=0; j<d; j++) dd_set_d(A->matrix[i][j],a_input[i*d+j]); } A->representation=dd_Inequality; poly=dd_DDMatrix2Poly(A, &err); /* compute the second (generator) representation */ if (err==dd_NoError){ G=dd_CopyGenerators(poly); GI=dd_CopyIncidence(poly); GA=dd_CopyAdjacency(poly); AI=dd_CopyInputIncidence(poly); AA=dd_CopyInputAdjacency(poly); MLPutFunction(stdlink,"List",5); dd_MLWriteMatrix(G); dd_MLWriteSetFamily(GI); dd_MLWriteSetFamily(GA); dd_MLWriteSetFamily(AI); dd_MLWriteSetFamily(AA); } else { dd_MLWriteError(poly); } dd_FreeMatrix(A); dd_FreeMatrix(G); dd_FreeSetFamily(GI); dd_FreeSetFamily(GA); dd_FreeSetFamily(AI); dd_FreeSetFamily(AA); }