blob: b5ed23f615e2aa7002e60a04d7d77027bd4f0463 [file] [log] [blame]
(* IOPolyhedra.m: written by Komei Fukuda; Version-980111 *)
ReadPolyhedraData[filename_String]:=
Block[{rf,outlist={},row={},m,n,i,val,st=" ",ty},
rf=OpenRead[filename];
While[st=!=EndOfFile && st=!="begin",
st=Read[rf,String];
];
{m,n,ty}=Read[rf,{Number,Number,Word}];
st=Skip[rf,String];
Print["m=", m,", n=",n, " type=", ty];
Do[
If[ty!="rational",
row=Read[rf,Table[Number,{n}]],
row=Read[rf,Table[Word,{n}]];row=ToExpression[row]
];
AppendTo[outlist,row],
{i,m}
];
Close[rf];
outlist
];
ReadIncidenceData[filename_String]:=
Block[{rf,outlist={},row={},m,n,n1,i,val,st=" ",inc,colon},
rf=OpenRead[filename];
While[st=!=EndOfFile && st=!="begin",
st=Read[rf,String];
];
{m,n,n1}=Read[rf,{Number,Number,Number}];
Print["m=", m,", n=",n];
Do[
{inc}=Read[rf,{Number}];
colon=Read[rf,{Word}];
row=Read[rf,Table[Number,{Abs[inc]}]];
If[inc>0,
AppendTo[outlist,row],
AppendTo[outlist,Complement[Range[n1],row]]
],
{i,m}
];
Close[rf];
outlist
];
ReadAdjacencyData[filename_String]:=
Block[{rf,outlist={},row={},v,num,i,val,st=" ",deg,colon},
rf=OpenRead[filename];
While[st=!=EndOfFile && st=!="begin",
st=Read[rf,String];
];
{v}=Read[rf,{Number}];
Print["v =", v];
Do[
{num, deg}=Read[rf,{Number, Number}];
colon=Read[rf,{Word}];
If[deg >0, row=Read[rf,Table[Number,{deg}]], row={}];
AppendTo[outlist,row],
{i,v}
];
Close[rf];
outlist
];
WritePolyhedraIne[a_List,b_List,filename_String,type_String:"real"]:=
Block[{wf,m,n,i,j,str},
wf=OpenWrite[filename];
{m,n}=Dimensions[a];
Write[wf,OutputForm["H-representation"]];
Write[wf,OutputForm["begin"]];
Write[wf,m,OutputForm[" "],n+1,OutputForm[" "],OutputForm[type]];
Do[
str="";
Do[
If[j==0,
str=StringJoin[str," ",ToString[b[[i]]]],
str=StringJoin[str," ",ToString[-a[[i,j]],FormatType->InputForm]]
],
{j,0,n}
];
Write[wf,OutputForm[str]],
{i,m}
];
Write[wf,OutputForm["end"]];
Write[wf,OutputForm["incidence"]];
Write[wf,OutputForm["input_incidence"]];
Write[wf,OutputForm["input_adjacency"]];
Write[wf,OutputForm["adjacency"]];
Close[wf];
];
VEtoIne[a_List,b_List,filename_String]:=WritePolyhedraIne[a,b,filename];
WritePolyhedraExt[a_List,filename_String,type_String:"real"]:=
Block[{wf,m,n,i,j,str},
wf=OpenWrite[filename];
{m,n}=Dimensions[a];
Write[wf,OutputForm["V-representation"]];
Write[wf,OutputForm["begin"]];
Write[wf,m,OutputForm[" "],n+1,OutputForm[" "],OutputForm[type]];
Do[
str="";
Do[
If[j==0,
str=StringJoin[str," ",ToString[1]],
str=StringJoin[str," ",ToString[a[[i,j]],FormatType->InputForm]]
],
{j,0,n}
];
Write[wf,OutputForm[str]],
{i,m}
];
Write[wf,OutputForm["end"]];
Write[wf,OutputForm["hull"]];
Write[wf,OutputForm["incidence"]];
Write[wf,OutputForm["input_incidence"]];
Write[wf,OutputForm["input_adjacency"]];
Write[wf,OutputForm["adjacency"]];
Close[wf];
];