blob: 5a617d3104273dc803e562376236686993a9333c [file] [log] [blame]
(*
PolytopeSkeleton.m,
by Komei Fukuda, fukuda@ifor.math.ethz.ch
Version March 3, 1999.
-- This Needs View3D package ---
*)
Visible[ineq_Integer, {a_,b_}, viewpoint_]:=
If[N[a[[ineq]].viewpoint] >= N[b[[ineq]]], True, False];
Visible[{a_,b_}, viewpoint_]:=
Map[Visible[#,{a,b},viewpoint]&, Range[Length[b]]];
VisibleSkeleton[vertices_,ecd_, ead_, {a_, b_},viewpoint_]:=
Block[{grtemp, edgelist, i, visibility, viseges, invisedges, visibles,invisibles},
edgelist={};
Do[ edgelist=Join[edgelist,Map[{i, #}&, ead[[i]]]],
{i,1,Length[ead]}
];edgelist=Select[edgelist,#[[1]]<#[[2]]&];
visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
visedges=Select[edgelist,
(Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
invisedges=Complement[edgelist,visedges];
visibles=(vertices[[#]]&) /@ visedges;
invisibles=(vertices[[#]]&) /@ invisedges;
grtemp=Join[{Thickness[ 0.0085]},
Line /@ visibles,
{Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
grtemp
];
VisibleSkeleton2[vertices_,ecd_, ead_, flist_,{a_, b_},viewpoint_]:=
Block[{grtemp, edgelist, i, edgelist0, visibility, viseges, invisedges, visibles,invisibles},
edgelist0={};
Do[ edgelist0=Join[edgelist0,Map[{i, #}&, ead[[i]]]],
{i,1,Length[ead]}
];edgelist0=Select[edgelist0,#[[1]]<#[[2]]&];
edgelist=Select[edgelist0,(Intersection[ecd[[#[[1]]]],ecd[[#[[2]]]],flist] != {})&];
visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
visedges=Select[edgelist,
(Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
invisedges=Complement[edgelist,visedges];
visibles=(vertices[[#]]&) /@ visedges;
invisibles=(vertices[[#]]&) /@ invisedges;
grtemp=Join[{Thickness[ 0.0085]},
Line /@ visibles,
{Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
grtemp
];
getMmaViewPoint[vp_,gr_]:=
ViewPointFromUser[vp,
FullOptions[gr,PlotRange],
FullOptions[gr,BoxRatios]
];
getUserViewPoint[vp_,gr_]:=
ViewPointToUser[vp,
FullOptions[gr,PlotRange],
FullOptions[gr,BoxRatios]
];
circle[alpha_, r_:2, h_:2]:=
{r*Cos[alpha], r*Sin[alpha], h}
(* end of PolytopeSkeleton.m *)