| (* |
| 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 *) |