19 #include "gfanlib/gfanlib.h"
20 #include "gfanlib/gfanlib_q.h"
30 s<<
"AMBIENT_DIM"<<std::endl;
31 s<<c->ambientDimension()<<std::endl;
33 gfan::ZMatrix
i=c->getInequalities();
35 if (c->areFacetsKnown())
36 s<<
"FACETS"<<std::endl;
38 s<<
"INEQUALITIES"<<std::endl;
45 gfan::ZMatrix e=c->getEquations();
47 if (c->areImpliedEquationsKnown())
48 s<<
"LINEAR_SPAN"<<std::endl;
50 s<<
"EQUATIONS"<<std::endl;
57 if (c->areExtremeRaysKnown())
59 gfan::ZMatrix r=c->extremeRays();
67 gfan::ZMatrix
l=c->generatorsOfLinealitySpace();
69 s<<
"LINEALITY_SPACE"<<std::endl;
82 return (
void*)(
new gfan::ZCone());
92 gfan::ZCone* zd = (gfan::ZCone*)
l->Data();
95 newZc =
new gfan::ZCone();
97 else if (r->
Typ()==
l->Typ())
101 gfan::ZCone* zd = (gfan::ZCone*)
l->Data();
104 newZc = (gfan::ZCone*)r->
CopyD();
108 int ambientDim = (int)(
long)r->
Data();
111 Werror(
"expected an int >= 0, but got %d", ambientDim);
116 gfan::ZCone* zd = (gfan::ZCone*)
l->Data();
119 newZc =
new gfan::ZCone(ambientDim);
123 Werror(
"assign Type(%d) = Type(%d) not implemented",
l->Typ(),r->
Typ());
133 l->data=(
void *)newZc;
152 gfan::ZCone* zc = (gfan::ZCone*) d;
159 gfan::ZCone* zc = (gfan::ZCone*)d;
160 gfan::ZCone* newZc =
new gfan::ZCone(*zc);
166 gfan::ZCone* zp = (gfan::ZCone*) i1->
Data();
173 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
174 int d1 = zp->ambientDimension();
175 int d2 = zq->ambientDimension();
178 WerrorS(
"mismatching ambient dimensions");
181 gfan::ZCone* zs =
new gfan::ZCone();
182 *zs = gfan::intersection(*zp, *zq);
185 res->data = (
void*) zs;
194 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
195 int d1 = zp->ambientDimension();
196 int d2 = zq->ambientDimension();
199 WerrorS(
"mismatching ambient dimensions");
202 gfan::ZMatrix
rays = zp->extremeRays();
203 rays.append(zq->extremeRays());
204 gfan::ZMatrix lineality = zp->generatorsOfLinealitySpace();
205 lineality.append(zq->generatorsOfLinealitySpace());
206 gfan::ZCone* zs =
new gfan::ZCone();
207 *zs = gfan::ZCone::givenByRays(
rays,lineality);
210 res->data = (
void*) zs;
219 gfan::ZCone* zq = (gfan::ZCone*) i2->
Data();
222 bool b = !((*zp)!=(*zq));
224 res->data = (
void*)
b;
250 gfan::ZCone* zc =
new gfan::ZCone(*zm, gfan::ZMatrix(0, zm->getWidth()));
255 res->data = (
void*) zc;
284 Werror(
"expected same number of columns but got %d vs. %d",
290 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2);
298 res->data = (
void*) zc;
328 Werror(
"expected same number of columns but got %d vs. %d",
332 int k = (int)(
long)
w->Data();
333 if ((
k < 0) || (
k > 3))
335 WerrorS(
"expected int argument in [0..3]");
340 gfan::ZCone* zc =
new gfan::ZCone(*zm1, *zm2,
k);
348 res->data = (
void*) zc;
354 gfan::initializeCddlibIfRequired();
361 gfan::deinitializeCddlibIfRequired();
371 gfan::deinitializeCddlibIfRequired();
381 gfan::deinitializeCddlibIfRequired();
385 WerrorS(
"coneViaInequalities: unexpected parameters");
405 gfan::ZCone* zc =
new gfan::ZCone();
406 *zc = gfan::ZCone::givenByRays(*zm, gfan::ZMatrix(0, zm->getWidth()));
408 res->data = (
void*) zc;
442 if (
rays->cols() != linSpace->
cols())
444 Werror(
"expected same number of columns but got %d vs. %d",
450 gfan::ZCone* zc =
new gfan::ZCone();
451 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
453 res->data = (
void*) zc;
494 if (
rays->cols() != linSpace->
cols())
496 Werror(
"expected same number of columns but got %d vs. %d",
500 int k = (int)(
long)
w->Data();
501 if ((
k < 0) || (
k > 3))
503 WerrorS(
"expected int argument in [0..3]");
508 gfan::ZCone* zc =
new gfan::ZCone();
509 *zc = gfan::ZCone::givenByRays(*zm1, *zm2);
512 res->data = (
void*) zc;
525 gfan::initializeCddlibIfRequired();
532 gfan::deinitializeCddlibIfRequired();
541 gfan::deinitializeCddlibIfRequired();
550 gfan::deinitializeCddlibIfRequired();
556 WerrorS(
"coneViaPoints: unexpected parameters");
565 gfan::initializeCddlibIfRequired();
566 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
567 gfan::ZMatrix zmat = zc->getInequalities();
570 gfan::deinitializeCddlibIfRequired();
573 WerrorS(
"inequalities: unexpected parameters");
582 gfan::initializeCddlibIfRequired();
583 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
584 gfan::ZMatrix zmat = zc->getEquations();
587 gfan::deinitializeCddlibIfRequired();
590 WerrorS(
"equations: unexpected parameters");
599 gfan::initializeCddlibIfRequired();
600 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
601 gfan::ZMatrix zm = zc->getFacets();
604 gfan::deinitializeCddlibIfRequired();
607 WerrorS(
"facets: unexpected parameters");
616 gfan::initializeCddlibIfRequired();
617 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
618 gfan::ZMatrix zmat = zc->getImpliedEquations();
621 gfan::deinitializeCddlibIfRequired();
624 WerrorS(
"span: unexpected parameters");
633 gfan::initializeCddlibIfRequired();
634 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
635 gfan::ZMatrix zmat = zc->generatorsOfSpan();
638 gfan::deinitializeCddlibIfRequired();
641 WerrorS(
"generatorsOfSpan: unexpected parameters");
650 gfan::initializeCddlibIfRequired();
651 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
652 gfan::ZMatrix zmat = zc->generatorsOfLinealitySpace();
655 gfan::deinitializeCddlibIfRequired();
658 WerrorS(
"generatorsOfLinealitySpace: unexpected parameters");
667 gfan::initializeCddlibIfRequired();
668 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
669 gfan::ZMatrix zm = zc->extremeRays();
672 gfan::deinitializeCddlibIfRequired();
677 gfan::initializeCddlibIfRequired();
678 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
679 gfan::ZMatrix zmat =
rays(zf);
682 gfan::deinitializeCddlibIfRequired();
685 WerrorS(
"rays: unexpected parameters");
694 gfan::initializeCddlibIfRequired();
695 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
696 gfan::ZMatrix zmat = zc->quotientLatticeBasis();
699 gfan::deinitializeCddlibIfRequired();
702 WerrorS(
"quotientLatticeBasis: unexpected parameters");
711 gfan::initializeCddlibIfRequired();
712 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
713 gfan::ZMatrix zmat = zc->getLinearForms();
716 gfan::deinitializeCddlibIfRequired();
719 WerrorS(
"getLinearForms: unexpected parameters");
728 gfan::initializeCddlibIfRequired();
729 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
731 res->data = (
void*) (
long) zc->ambientDimension();
732 gfan::deinitializeCddlibIfRequired();
737 gfan::initializeCddlibIfRequired();
738 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
741 gfan::deinitializeCddlibIfRequired();
746 gfan::initializeCddlibIfRequired();
747 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
750 gfan::deinitializeCddlibIfRequired();
753 WerrorS(
"ambientDimension: unexpected parameters");
762 gfan::initializeCddlibIfRequired();
763 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
765 res->data = (
void*) (
long) zc->dimension();
766 gfan::deinitializeCddlibIfRequired();
771 gfan::initializeCddlibIfRequired();
772 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
775 gfan::deinitializeCddlibIfRequired();
780 gfan::initializeCddlibIfRequired();
781 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
784 gfan::deinitializeCddlibIfRequired();
787 WerrorS(
"dimension: unexpected parameters");
796 gfan::initializeCddlibIfRequired();
797 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
799 res->data = (
void*) (
long) zc->codimension();
800 gfan::deinitializeCddlibIfRequired();
805 gfan::initializeCddlibIfRequired();
806 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
809 gfan::deinitializeCddlibIfRequired();
814 gfan::initializeCddlibIfRequired();
815 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
818 gfan::deinitializeCddlibIfRequired();
821 WerrorS(
"getCodimension: unexpected parameters");
830 gfan::initializeCddlibIfRequired();
831 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
833 res->data = (
void*) (
long) zc->dimensionOfLinealitySpace();
834 gfan::deinitializeCddlibIfRequired();
839 gfan::initializeCddlibIfRequired();
840 gfan::ZFan* zf = (gfan::ZFan*)u->
Data();
843 gfan::deinitializeCddlibIfRequired();
846 WerrorS(
"linealityDimension: unexpected parameters");
855 gfan::initializeCddlibIfRequired();
856 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
859 res->data = (
void*)
i;
860 gfan::deinitializeCddlibIfRequired();
863 WerrorS(
"getMultiplicity: unexpected parameters");
872 gfan::initializeCddlibIfRequired();
873 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
874 int i = zc->isOrigin();
876 res->data = (
void*) (
long)
i;
877 gfan::deinitializeCddlibIfRequired();
880 WerrorS(
"isOrigin: unexpected parameters");
889 gfan::initializeCddlibIfRequired();
890 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
891 int i = zc->isFullSpace();
893 res->data = (
void*) (
long)
i;
894 gfan::deinitializeCddlibIfRequired();
897 WerrorS(
"isFullSpace: unexpected parameters");
906 gfan::initializeCddlibIfRequired();
907 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
908 int b = zc->isSimplicial();
910 res->data = (
void*) (
long)
b;
911 gfan::deinitializeCddlibIfRequired();
916 gfan::initializeCddlibIfRequired();
917 gfan::ZFan* zf = (gfan::ZFan*) u->
Data();
920 res->data = (
void*) (
long)
b;
921 gfan::deinitializeCddlibIfRequired();
924 WerrorS(
"isSimplicial: unexpected parameters");
933 gfan::initializeCddlibIfRequired();
934 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
935 int i = zc->containsPositiveVector();
937 res->data = (
void*) (
long)
i;
938 gfan::deinitializeCddlibIfRequired();
941 WerrorS(
"containsPositiveVector: unexpected parameters");
950 gfan::initializeCddlibIfRequired();
951 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
952 gfan::ZCone* zd =
new gfan::ZCone(zc->linealitySpace());
954 res->data = (
void*) zd;
955 gfan::deinitializeCddlibIfRequired();
958 WerrorS(
"linealitySpace: unexpected parameters");
967 gfan::initializeCddlibIfRequired();
968 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
969 gfan::ZCone* zd =
new gfan::ZCone(zc->dualCone());
971 res->data = (
void*) zd;
972 gfan::deinitializeCddlibIfRequired();
975 WerrorS(
"dual: unexpected parameters");
984 gfan::initializeCddlibIfRequired();
985 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
986 gfan::ZCone* zd =
new gfan::ZCone(zc->negated());
988 res->data = (
void*) zd;
989 gfan::deinitializeCddlibIfRequired();
992 WerrorS(
"negatedCone: unexpected parameters");
1001 gfan::initializeCddlibIfRequired();
1002 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1003 int d = zc->dimension();
1004 int dLS = zc->dimensionOfLinealitySpace();
1007 gfan::ZVector zv = zc->semiGroupGeneratorOfRay();
1010 gfan::deinitializeCddlibIfRequired();
1013 gfan::deinitializeCddlibIfRequired();
1014 Werror(
"expected dim of cone one larger than dim of lin space\n"
1015 "but got dimensions %d and %d", d, dLS);
1017 WerrorS(
"semigroupGenerator: unexpected parameters");
1026 gfan::initializeCddlibIfRequired();
1027 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1028 gfan::ZVector zv = zc->getRelativeInteriorPoint();
1031 gfan::deinitializeCddlibIfRequired();
1034 WerrorS(
"relativeInteriorPoint: unexpected parameters");
1043 gfan::initializeCddlibIfRequired();
1044 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1045 gfan::ZVector zv = zc->getUniquePoint();
1048 gfan::deinitializeCddlibIfRequired();
1051 WerrorS(
"uniquePoint: unexpected parameters");
1057 gfan::ZVector rp = gfan::ZVector(zc->ambientDimension());
1059 gfan::ZMatrix
rays = zc->extremeRays();
1060 for (
int i=0;
i<
rays.getHeight();
i++)
1063 rp = rp + n *
rays[
i].toVector();
1066 gfan::ZMatrix lins = zc->generatorsOfLinealitySpace();
1067 for (
int i=0;
i<lins.getHeight();
i++)
1070 rp = rp + n * lins[
i].toVector();
1081 gfan::initializeCddlibIfRequired();
1082 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1086 gfan::deinitializeCddlibIfRequired();
1089 WerrorS(
"randomPoint: unexpected parameters");
1098 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1102 gfan::initializeCddlibIfRequired();
1103 int val = (int)(
long)
v->Data();
1104 zc->setMultiplicity(gfan::Integer(val));
1107 gfan::deinitializeCddlibIfRequired();
1111 WerrorS(
"setMultiplicity: unexpected parameters");
1120 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1124 gfan::initializeCddlibIfRequired();
1134 zc->setLinearForms(*zm);
1141 gfan::deinitializeCddlibIfRequired();
1145 WerrorS(
"setLinearForms: unexpected parameters");
1149 gfan::ZMatrix
liftUp(
const gfan::ZMatrix &zm)
1151 int r=zm.getHeight();
1152 int c=zm.getWidth();
1153 gfan::ZMatrix zn(r+1,c+1);
1155 for (
int i=0;
i<r;
i++)
1156 for (
int j=0;
j<c;
j++)
1157 zn[
i+1][
j+1]=zm[
i][
j];
1163 gfan::ZMatrix ineq=zc.getInequalities();
1164 gfan::ZMatrix eq=zc.getEquations();
1174 gfan::initializeCddlibIfRequired();
1175 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1176 gfan::ZMatrix ineq=zc->getInequalities();
1177 gfan::ZMatrix eq=zc->getEquations();
1178 gfan::ZCone* zd =
new gfan::ZCone(
liftUp(ineq),
liftUp(eq));
1180 res->data = (
void*) zd;
1181 gfan::deinitializeCddlibIfRequired();
1184 WerrorS(
"makePolytope: unexpected parameters");
1196 gfan::initializeCddlibIfRequired();
1197 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1198 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1199 int d1 = zc1->ambientDimension();
1200 int d2 = zc2->ambientDimension();
1203 Werror(
"expected ambient dims of both cones to coincide\n"
1204 "but got %d and %d", d1, d2);
1205 gfan::deinitializeCddlibIfRequired();
1208 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1211 res->data = (
void *)
new gfan::ZCone(zc3);
1212 gfan::deinitializeCddlibIfRequired();
1217 gfan::initializeCddlibIfRequired();
1218 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1219 gfan::ZCone zc1 =
liftUp(*zc11);
1220 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1221 int d1 = zc1.ambientDimension();
1222 int d2 = zc2->ambientDimension();
1225 Werror(
"expected ambient dims of both cones to coincide\n"
1226 "but got %d and %d", d1, d2);
1227 gfan::deinitializeCddlibIfRequired();
1230 gfan::ZCone zc3 = gfan::intersection(zc1, *zc2);
1233 res->data = (
void *)
new gfan::ZCone(zc3);
1234 gfan::deinitializeCddlibIfRequired();
1252 WerrorS(
"convexIntersection: entries of wrong type in list");
1255 gfan::ZCone* ll = (gfan::ZCone*)
l->m[
i].Data();
1256 r1 = r1 + ll->getInequalities().getHeight();
1257 r2 = r2 + ll->getEquations().getHeight();
1261 gfan::ZCone* ll = (gfan::ZCone*)
l->m[0].Data();
1262 c = ll->getInequalities().getWidth();
1264 gfan::ZMatrix totalIneqs(r1,c);
1265 gfan::ZMatrix totalEqs(r2,c);
1272 gfan::ZCone* ll = (gfan::ZCone*)
l->m[
i].Data();
1273 gfan::ZMatrix ineqs = ll->getInequalities();
1274 for (
int j=0;
j<ineqs.getHeight();
j++)
1276 totalIneqs[r1]=ineqs[
j];
1279 gfan::ZMatrix eqs = ll->getEquations();
1280 for (
int j=0;
j<eqs.getHeight();
j++)
1282 totalEqs[r2]=eqs[
j];
1287 gfan::ZCone* zc =
new gfan::ZCone(totalIneqs,totalEqs);
1290 res->data = (
void *) zc;
1299 gfan::initializeCddlibIfRequired();
1300 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1301 gfan::ZCone* zc22 = (gfan::ZCone*)
v->Data();
1302 gfan::ZCone zc2 =
liftUp(*zc22);
1303 int d1 = zc1->ambientDimension();
1304 int d2 = zc2.ambientDimension();
1307 Werror(
"expected ambient dims of both cones to coincide\n"
1308 "but got %d and %d", d1, d2);
1309 gfan::deinitializeCddlibIfRequired();
1312 gfan::ZCone zc3 = gfan::intersection(*zc1, zc2);
1315 res->data = (
void *)
new gfan::ZCone(zc3);
1316 gfan::deinitializeCddlibIfRequired();
1321 gfan::initializeCddlibIfRequired();
1322 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1323 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1324 int d1 = zc1->ambientDimension();
1325 int d2 = zc2->ambientDimension();
1328 Werror(
"expected ambient dims of both cones to coincide\n"
1329 "but got %d and %d", d1, d2);
1330 gfan::deinitializeCddlibIfRequired();
1333 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1336 res->data = (
void *)
new gfan::ZCone(zc3);
1337 gfan::deinitializeCddlibIfRequired();
1341 WerrorS(
"convexIntersection: unexpected parameters");
1353 gfan::initializeCddlibIfRequired();
1354 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1355 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1356 int d1 = zc1->ambientDimension();
1357 int d2 = zc2->ambientDimension();
1360 Werror(
"expected ambient dims of both cones to coincide\n"
1361 "but got %d and %d", d1, d2);
1362 gfan::deinitializeCddlibIfRequired();
1365 gfan::ZMatrix zm1 = zc1->extremeRays();
1366 gfan::ZMatrix zm2 = zc2->extremeRays();
1367 gfan::ZMatrix zn1 = zc1->generatorsOfLinealitySpace();
1368 gfan::ZMatrix zn2 = zc2->generatorsOfLinealitySpace();
1369 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1370 gfan::ZMatrix zn = combineOnTop(zn1,zn2);
1371 gfan::ZCone* zc =
new gfan::ZCone();
1372 *zc = gfan::ZCone::givenByRays(zm, zn);
1374 res->data = (
void*) zc;
1375 gfan::deinitializeCddlibIfRequired();
1380 gfan::initializeCddlibIfRequired();
1381 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1382 gfan::ZCone zc1 =
liftUp(*zc11);
1383 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1384 int d1 = zc1.ambientDimension()-1;
1385 int d2 = zc2->ambientDimension()-1;
1388 Werror(
"expected ambient dims of both cones to coincide\n"
1389 "but got %d and %d", d1, d2);
1390 gfan::deinitializeCddlibIfRequired();
1393 gfan::ZMatrix zm1 = zc1.extremeRays();
1394 gfan::ZMatrix zm2 = zc2->extremeRays();
1395 gfan::ZMatrix zn = zc1.generatorsOfLinealitySpace();
1396 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1397 gfan::ZCone* zc =
new gfan::ZCone();
1398 *zc = gfan::ZCone::givenByRays(zm, zn);
1400 res->data = (
void*) zc;
1401 gfan::deinitializeCddlibIfRequired();
1410 gfan::initializeCddlibIfRequired();
1411 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1412 gfan::ZCone* zc22 = (gfan::ZCone*)
v->Data();
1413 gfan::ZCone zc2 =
liftUp(*zc22);
1414 int d1 = zc1->ambientDimension()-1;
1415 int d2 = zc2.ambientDimension()-1;
1418 Werror(
"expected ambient dims of both cones to coincide\n"
1419 "but got %d and %d", d1, d2);
1420 gfan::deinitializeCddlibIfRequired();
1423 gfan::ZMatrix zm1 = zc1->extremeRays();
1424 gfan::ZMatrix zm2 = zc2.extremeRays();
1425 gfan::ZMatrix zn = zc2.generatorsOfLinealitySpace();
1426 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1427 gfan::ZCone* zc =
new gfan::ZCone();
1428 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1430 res->data = (
void*) zc;
1431 gfan::deinitializeCddlibIfRequired();
1436 gfan::initializeCddlibIfRequired();
1437 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1438 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1439 int d1 = zc1->ambientDimension()-1;
1440 int d2 = zc2->ambientDimension()-1;
1443 Werror(
"expected ambient dims of both cones to coincide\n"
1444 "but got %d and %d", d1, d2);
1445 gfan::deinitializeCddlibIfRequired();
1448 gfan::ZMatrix zm1 = zc1->extremeRays();
1449 gfan::ZMatrix zm2 = zc2->extremeRays();
1450 gfan::ZMatrix zm = combineOnTop(zm1,zm2);
1451 gfan::ZCone* zc =
new gfan::ZCone();
1452 *zc = gfan::ZCone::givenByRays(zm,gfan::ZMatrix(0, zm.getWidth()));
1454 res->data = (
void*) zc;
1455 gfan::deinitializeCddlibIfRequired();
1459 WerrorS(
"convexHull: unexpected parameters");
1471 gfan::initializeCddlibIfRequired();
1472 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1482 int d1 = zc->ambientDimension();
1483 int d2 = zv->size();
1486 Werror(
"expected ambient dim of cone and size of vector\n"
1487 " to be equal but got %d and %d", d1, d2);
1488 gfan::deinitializeCddlibIfRequired();
1491 if(!zc->contains(*zv))
1493 WerrorS(
"the provided intvec does not lie in the cone");
1494 gfan::deinitializeCddlibIfRequired();
1497 gfan::ZCone* zd =
new gfan::ZCone(zc->link(*zv));
1499 res->data = (
void *) zd;
1504 gfan::deinitializeCddlibIfRequired();
1508 WerrorS(
"coneLink: unexpected parameters");
1520 gfan::initializeCddlibIfRequired();
1521 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1522 gfan::ZCone* zd = (gfan::ZCone*)
v->Data();
1523 int d1 = zc->ambientDimension();
1524 int d2 = zd->ambientDimension();
1527 Werror(
"expected cones with same ambient dimensions\n but got"
1528 " dimensions %d and %d", d1, d2);
1529 gfan::deinitializeCddlibIfRequired();
1532 bool b = (zc->contains(*zd) ? 1 : 0);
1534 res->data = (
void*) (
long)
b;
1535 gfan::deinitializeCddlibIfRequired();
1540 gfan::initializeCddlibIfRequired();
1541 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1552 int d1 = zc->ambientDimension();
1553 int d2 = zv->size();
1556 Werror(
"expected cones with same ambient dimensions\n but got"
1557 " dimensions %d and %d", d1, d2);
1558 gfan::deinitializeCddlibIfRequired();
1561 int b = zc->contains(*zv);
1563 res->data = (
void*) (
long)
b;
1568 gfan::deinitializeCddlibIfRequired();
1572 WerrorS(
"containsInSupport: unexpected parameters");
1578 gfan::initializeCddlibIfRequired();
1585 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1586 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1587 int d1 = zc1->ambientDimension();
1588 int d2 = zc2->ambientDimension();
1591 Werror(
"expected ambient dims of both cones to coincide\n"
1592 "but got %d and %d", d1, d2);
1595 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1598 res->data = (
void *)
new gfan::ZCone(zc3);
1603 gfan::ZCone* zc11 = (gfan::ZCone*)u->
Data();
1604 gfan::ZCone zc1 =
liftUp(*zc11);
1605 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1606 int d1 = zc1.ambientDimension();
1607 int d2 = zc2->ambientDimension();
1610 Werror(
"expected ambient dims of both cones to coincide\n"
1611 "but got %d and %d", d1, d2);
1614 gfan::ZCone zc3 = gfan::intersection(zc1, *zc2);
1617 res->data = (
void *)
new gfan::ZCone(zc3);
1626 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1627 gfan::ZCone* zc22 = (gfan::ZCone*)
v->Data();
1628 gfan::ZCone zc2 =
liftUp(*zc22);
1629 int d1 = zc1->ambientDimension();
1630 int d2 = zc2.ambientDimension();
1633 Werror(
"expected ambient dims of both cones to coincide\n"
1634 "but got %d and %d", d1, d2);
1637 gfan::ZCone zc3 = gfan::intersection(*zc1, zc2);
1640 res->data = (
void *)
new gfan::ZCone(zc3);
1645 gfan::ZCone* zc1 = (gfan::ZCone*)u->
Data();
1646 gfan::ZCone* zc2 = (gfan::ZCone*)
v->Data();
1647 int d1 = zc1->ambientDimension();
1648 int d2 = zc2->ambientDimension();
1651 Werror(
"expected ambient dims of both cones to coincide\n"
1652 "but got %d and %d", d1, d2);
1655 gfan::ZCone zc3 = gfan::intersection(*zc1, *zc2);
1658 res->data = (
void *)
new gfan::ZCone(zc3);
1662 WerrorS(
"convexIntersectionOld: unexpected parameters");
1674 gfan::initializeCddlibIfRequired();
1675 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1685 int d1 = zc->ambientDimension();
1686 int d2 = zv->size();
1689 bool b = (zc->containsRelatively(*zv) ? 1 : 0);
1691 res->data = (
void *)
b;
1695 gfan::deinitializeCddlibIfRequired();
1701 gfan::deinitializeCddlibIfRequired();
1702 Werror(
"expected ambient dim of cone and size of vector\n"
1703 "to be equal but got %d and %d", d1, d2);
1706 WerrorS(
"containsRelatively: unexpected parameters");
1718 gfan::initializeCddlibIfRequired();
1719 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1720 gfan::ZCone* zd = (gfan::ZCone*)
v->Data();
1721 bool b = zc->hasFace(*zd);
1723 res->data = (
void*) (
long)
b;
1724 gfan::deinitializeCddlibIfRequired();
1733 gfan::initializeCddlibIfRequired();
1734 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1735 gfan::ZCone* zd = (gfan::ZCone*)
v->Data();
1736 bool b = zc->hasFace(*zd);
1738 res->data = (
void*) (
long)
b;
1739 gfan::deinitializeCddlibIfRequired();
1743 WerrorS(
"containsAsFace: unexpected parameters");
1752 gfan::initializeCddlibIfRequired();
1753 gfan::ZCone* zc = (gfan::ZCone*)u->
Data();
1754 gfan::ZCone* zd =
new gfan::ZCone(*zc);
1757 res->data = (
void*) zd;
1758 gfan::deinitializeCddlibIfRequired();
1761 WerrorS(
"canonicalizeCone: unexpected parameters");
1773 gfan::initializeCddlibIfRequired();
1775 gfan::ZCone* zc = (gfan::ZCone*)
v->Data();
1782 WerrorS(
"containsCone: entries of wrong type in list");
1783 gfan::deinitializeCddlibIfRequired();
1786 gfan::ZCone* ll = (gfan::ZCone*)
l->m[
i].Data();
1788 if (!((*ll) != (*zc)))
1795 res->data = (
char*) (
long)
b;
1796 gfan::deinitializeCddlibIfRequired();
1800 WerrorS(
"containsCone: unexpected parameters");
1812 gfan::initializeCddlibIfRequired();
1813 gfan::ZCone* zc = (gfan::ZCone*) u->
Data();
1825 if (!zc->contains(*point))
1827 WerrorS(
"faceContaining: point not in cone");
1831 res->data = (
void*)
new gfan::ZCone(zc->faceContaining(*point));
1836 gfan::deinitializeCddlibIfRequired();
1840 WerrorS(
"faceContaining: unexpected parameters");
1851 gfan::ZMatrix
equations = zc.getImpliedEquations();
1856 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1857 if (r==0)
return relativeInteriorPoints;
1862 gfan::ZMatrix newInequalities =
inequalities.submatrix(1,0,r,c);
1865 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1866 facet.canonicalize();
1867 gfan::ZVector interiorPoint =
facet.getRelativeInteriorPoint();
1868 if (exceptThese.count(interiorPoint)==0)
1869 relativeInteriorPoints.appendRow(interiorPoint);
1872 for (
int i=1;
i<r-1;
i++)
1878 facet = gfan::ZCone(newInequalities,newEquations);
1879 facet.canonicalize();
1880 interiorPoint =
facet.getRelativeInteriorPoint();
1881 if (exceptThese.count(interiorPoint)==0)
1882 relativeInteriorPoints.appendRow(interiorPoint);
1889 facet = gfan::ZCone(newInequalities,newEquations);
1890 facet.canonicalize();
1891 interiorPoint =
facet.getRelativeInteriorPoint();
1892 if (exceptThese.count(interiorPoint)==0)
1893 relativeInteriorPoints.appendRow(interiorPoint);
1895 return relativeInteriorPoints;
1902 std::pair<gfan::ZMatrix,gfan::ZMatrix>
interiorPointsAndNormalsOfFacets(
const gfan::ZCone zc,
const std::set<gfan::ZVector> &exceptThesePoints,
const bool onlyLowerHalfSpace)
1905 gfan::ZMatrix
equations = zc.getImpliedEquations();
1910 gfan::ZMatrix relativeInteriorPoints = gfan::ZMatrix(0,c);
1911 gfan::ZMatrix outerFacetNormals = gfan::ZMatrix(0,c);
1913 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1918 gfan::ZMatrix newInequalities =
inequalities.submatrix(1,0,r,c);
1921 gfan::ZCone
facet = gfan::ZCone(newInequalities,newEquations);
1922 gfan::ZVector interiorPoint =
facet.getRelativeInteriorPoint();
1923 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1925 if (exceptThesePoints.count(interiorPoint)==0)
1927 relativeInteriorPoints.appendRow(interiorPoint);
1928 outerFacetNormals.appendRow(-
inequalities[0].toVector());
1933 for (
int i=1;
i<r-1;
i++)
1939 facet = gfan::ZCone(newInequalities,newEquations);
1940 interiorPoint =
facet.getRelativeInteriorPoint();
1941 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1943 if (exceptThesePoints.count(interiorPoint)==0)
1945 relativeInteriorPoints.appendRow(interiorPoint);
1955 facet = gfan::ZCone(newInequalities,newEquations);
1956 interiorPoint =
facet.getRelativeInteriorPoint();
1957 if (onlyLowerHalfSpace==
false || interiorPoint[0].
sign()<0)
1959 if (exceptThesePoints.count(interiorPoint)==0)
1961 relativeInteriorPoints.appendRow(interiorPoint);
1962 outerFacetNormals.appendRow(-
inequalities[r-1].toVector());
1966 return std::make_pair(relativeInteriorPoints,outerFacetNormals);
1982 fprintf(dd->
f_write,
"%d %d ",
M.getHeight(),
M.getWidth());
1984 for (
int i=0;
i<
M.getHeight();
i++)
1986 for (
int j=0;
j<
M.getWidth();
j++)
1998 memset(&
l,0,
sizeof(
l));
2000 l.data=(
void*)
"cone";
2003 gfan::ZCone *Z = (gfan::ZCone*) d;
2004 fprintf(dd->
f_write,
"%d ",Z->areImpliedEquationsKnown()+Z->areFacetsKnown()*2);
2006 gfan::ZMatrix
i=Z->getInequalities();
2009 gfan::ZMatrix e=Z->getEquations();
2021 gfan::Integer n(tmp);
2031 gfan::ZMatrix
M(r,c);
2032 for (
int i=0;
i<r;
i++)
2034 for (
int j=0;
j<c;
j++)
2053 gfan::ZCone* Z =
new gfan::ZCone(
i,e,preassumptions);
2061 blackbox *
b=(blackbox*)
omAlloc0(
sizeof(blackbox));