blob: 5a617d3104273dc803e562376236686993a9333c [file] [log] [blame]
Austin Schuh405fa6c2015-09-06 18:13:55 -07001(*
2 PolytopeSkeleton.m,
3 by Komei Fukuda, fukuda@ifor.math.ethz.ch
4 Version March 3, 1999.
5 -- This Needs View3D package ---
6*)
7
8Visible[ineq_Integer, {a_,b_}, viewpoint_]:=
9 If[N[a[[ineq]].viewpoint] >= N[b[[ineq]]], True, False];
10
11Visible[{a_,b_}, viewpoint_]:=
12 Map[Visible[#,{a,b},viewpoint]&, Range[Length[b]]];
13
14VisibleSkeleton[vertices_,ecd_, ead_, {a_, b_},viewpoint_]:=
15 Block[{grtemp, edgelist, i, visibility, viseges, invisedges, visibles,invisibles},
16 edgelist={};
17 Do[ edgelist=Join[edgelist,Map[{i, #}&, ead[[i]]]],
18 {i,1,Length[ead]}
19 ];edgelist=Select[edgelist,#[[1]]<#[[2]]&];
20 visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
21 visedges=Select[edgelist,
22 (Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
23 invisedges=Complement[edgelist,visedges];
24 visibles=(vertices[[#]]&) /@ visedges;
25 invisibles=(vertices[[#]]&) /@ invisedges;
26 grtemp=Join[{Thickness[ 0.0085]},
27 Line /@ visibles,
28 {Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
29 grtemp
30 ];
31
32VisibleSkeleton2[vertices_,ecd_, ead_, flist_,{a_, b_},viewpoint_]:=
33 Block[{grtemp, edgelist, i, edgelist0, visibility, viseges, invisedges, visibles,invisibles},
34 edgelist0={};
35 Do[ edgelist0=Join[edgelist0,Map[{i, #}&, ead[[i]]]],
36 {i,1,Length[ead]}
37 ];edgelist0=Select[edgelist0,#[[1]]<#[[2]]&];
38 edgelist=Select[edgelist0,(Intersection[ecd[[#[[1]]]],ecd[[#[[2]]]],flist] != {})&];
39 visibility=Flatten[Position[Visible[{a, b},viewpoint],True]];
40 visedges=Select[edgelist,
41 (Intersection[visibility,ecd[[#[[1]]]],ecd[[#[[2]]]] ] != {}) &];
42 invisedges=Complement[edgelist,visedges];
43 visibles=(vertices[[#]]&) /@ visedges;
44 invisibles=(vertices[[#]]&) /@ invisedges;
45 grtemp=Join[{Thickness[ 0.0085]},
46 Line /@ visibles,
47 {Thickness[ 0.0035], Dashing[{0.01,0.012}]}, Line /@ invisibles];
48 grtemp
49 ];
50
51getMmaViewPoint[vp_,gr_]:=
52 ViewPointFromUser[vp,
53 FullOptions[gr,PlotRange],
54 FullOptions[gr,BoxRatios]
55 ];
56
57getUserViewPoint[vp_,gr_]:=
58 ViewPointToUser[vp,
59 FullOptions[gr,PlotRange],
60 FullOptions[gr,BoxRatios]
61 ];
62
63circle[alpha_, r_:2, h_:2]:=
64 {r*Cos[alpha], r*Sin[alpha], h}
65
66(* end of PolytopeSkeleton.m *)