This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== BigObject HyperplaneArrangement<Scalar> ====== //from application [[..:fan|fan]]//\\ \\ A hyperplane arrangement. The hyperplane arrangement is given by a matrix ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' whose rows are the linear equations of the hyperplanes and an optional support cone. The support cone defaults to being the whole space. Duplicate hyperplanes are ignored, as well as hyperplanes that intersect the support cone trivially. The support cone is subdivided by the hyperplanes resulting in a fan ''[[..:fan:HyperplaneArrangement#CHAMBER_DECOMPOSITION |CHAMBER_DECOMPOSITION]]''. ? Type Parameters: :: ''Scalar'': numeric data type used for the coordinates, must be an ordered field. Default is ''[[..:common#Rational |Rational]]''. ? derived from: : ''[[..:polytope:VectorConfiguration |VectorConfiguration]]'' ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1 </code> :: <code perl> > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> ? Example: :: Coxeter hyperplane arrangement of type E8. :: <code perl> > $E8 = new HyperplaneArrangement(HYPERPLANES=>root_system("E8")->VECTORS->minor(All,~[0])); </code> :: Note that the roots lie "at infinity", which is why the leading zero column of the root vectors is eliminated. ? Permutations: : ? ConesPerm: :: permuting the ''[[..:fan:PolyhedralFan#RAYS |RAYS]]'' ===== Properties ===== ==== Input property ==== These properties are for input only. They allow redundant information. ---- {{anchor:support:}} ? **''SUPPORT''** :: A cone being subdivided by the ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' defaults to the whole space. ? Type: :''[[..:polytope:Cone |Cone]]<Scalar>'' ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1 </code> :: <code perl> > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> ? Example: :: Subdivide the two-dimensional space along the axes :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; -1 0 0 -1 0 1 1 0 </code> :: <code perl> > print $CD->MAXIMAL_CONES; {2 3} {1 3} {0 2} {0 1} </code> :: <code perl> > print $CD->COMPLETE; true </code> ---- ==== Combinatorics ==== These properties capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice. ---- {{anchor:chamber_signatures:}} ? **''CHAMBER_SIGNATURES''** :: The i-th entry is the signature of the i-th maximal cone of the ''[[..:fan:HyperplaneArrangement#CHAMBER_DECOMPOSITION |CHAMBER_DECOMPOSITION]]'' as Set<Int> # of indices of the ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' that evaluate positively on this cone. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> :: <code perl> > print $HA->CHAMBER_SIGNATURES; {} {0} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0} </code> :: <code perl> > print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0 </code> :: <code perl> > print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2} </code> ---- {{anchor:n_hyperplanes:}} ? **''N_HYPERPLANES''** :: Number of ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]''. Alias for property ''[[..:polytope:VectorConfiguration#N_VECTORS |N_VECTORS]]''. ? Type: :''[[..:common#Int |Int]]'' ? Example: :: Coordinate hyperplane arrangement in the plane. :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,0],[0,1]]); > print $HA->N_HYPERPLANES; 2 </code> ---- {{anchor:rays_in_hyperplanes:}} ? **''RAYS_IN_HYPERPLANES''** :: Incidences between ''[[..:fan:PolyhedralFan#RAYS |RAYS]]'' and ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]''. ? Type: :''[[..:common#IncidenceMatrix |IncidenceMatrix]]<[[..:common#NonSymmetric |NonSymmetric]]>'' ---- ==== Geometry ==== These properties capture geometric information of the object. Geometric properties depend on geometric information of the object, like, e.g., vertices or facets. ---- {{anchor:chamber_decomposition:}} ? **''CHAMBER_DECOMPOSITION''** :: Slicing the ''[[..:fan:HyperplaneArrangement#SUPPORT |SUPPORT]]'' along every hyperplane of ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' one gets a polyhedral fan. ? Type: :''[[..:fan:PolyhedralFan |PolyhedralFan]]<Scalar>'' ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->RAYS; 0 1 1 0 1 1 </code> :: <code perl> > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> ---- {{anchor:hyperplanes:}} ? **''HYPERPLANES''** :: A matrix containing the hyperplanes of the arrangement as rows. Alias for property ''[[..:polytope:VectorConfiguration#VECTORS |VECTORS]]''. ? Type: :''[[..:common#Matrix |Matrix]]<Scalar,[[..:common#NonSymmetric |NonSymmetric]]>'' ? Example: :: The same hyperplane with opposing directions. :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,-1],[-1,1],[1,1]]); > print $HA->HYPERPLANES; 1 -1 -1 1 1 1 </code> ? Example: :: A hyperplane that does not cut through the ''[[..:fan:HyperplaneArrangement#SUPPORT |SUPPORT]]'' :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[1,1]], "SUPPORT.INEQUALITIES"=>unit_matrix(2)); > print $HA->HYPERPLANES; 1 1 </code> ---- {{anchor:hyperplane_ambient_dim:}} ? **''HYPERPLANE_AMBIENT_DIM''** :: Dimension of the space which contains the hyperplane arrangement. Alias for property ''[[..:polytope:VectorConfiguration#VECTOR_AMBIENT_DIM |VECTOR_AMBIENT_DIM]]''. ? Type: :''[[..:common#Int |Int]]'' ---- {{anchor:lineality_space:}} ? **''LINEALITY_SPACE''** :: A basis of the lineality space of the hyperplane arrangement. ? Type: :''[[..:common#Matrix |Matrix]]<Scalar,[[..:common#NonSymmetric |NonSymmetric]]>'' ---- ==== no category ==== {{anchor:hyperplane_labels:}} ? **''HYPERPLANE_LABELS''** :: For a polyhedral fan built from scratch, you should create this property by yourself, either manually in a text editor, or with a client program. ? Type: :''[[..:common#Array |Array]]<[[..:common#String |String]]>'' ---- ===== Methods ===== ==== Combinatorics ==== These methods capture combinatorial information of the object. Combinatorial properties only depend on combinatorial data of the object like, e.g., the face lattice. ---- {{anchor:chamber_to_signature:}} ? **''chamber_to_signature''** :: Given a maximal cone of ''[[..:fan:HyperplaneArrangement#CHAMBER_DECOMPOSITION |CHAMBER_DECOMPOSITION]]'' as Set<Int> containing the indices of the rays spanning it, return the signature of the cone as Set<Int> of indices of the ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' that evaluate negatively on this cone. ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> :: <code perl> > print $HA->CHAMBER_SIGNATURES; {} {0} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0} </code> :: <code perl> > print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0 </code> :: <code perl> > print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2} </code> ---- {{anchor:signature_to_chamber:}} ? **''signature_to_chamber''** :: Given a signature as a Set<Int> of indices that indicate which ''[[..:fan:HyperplaneArrangement#HYPERPLANES |HYPERPLANES]]'' should evaluate negatively (the remaining evaluate positively), return the maximal cone of ''[[..:fan:HyperplaneArrangement#CHAMBER_DECOMPOSITION |CHAMBER_DECOMPOSITION]]'' associated to this signature. The result the index of the maximal cone in the maximal cones of ''[[..:fan:HyperplaneArrangement#CHAMBER_DECOMPOSITION |CHAMBER_DECOMPOSITION]]''. ? Example: :: Take the 2-dimensional positive orthant and slice it along the ray through (1,1) :: <code perl> > $HA = new HyperplaneArrangement(HYPERPLANES=>[[-1,1]], "SUPPORT.INPUT_RAYS"=>[[1,0],[0,1]]); > $CD = $HA->CHAMBER_DECOMPOSITION; > print $CD->MAXIMAL_CONES; {1 2} {0 2} </code> :: <code perl> > print $HA->CHAMBER_SIGNATURES; {} {0} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[0]); {} </code> :: <code perl> > print $HA->chamber_to_signature($CD->MAXIMAL_CONES->[1]); {0} </code> :: <code perl> > print $HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0]); 0 </code> :: <code perl> > print $CD->MAXIMAL_CONES->[$HA->signature_to_chamber($HA->CHAMBER_SIGNATURES->[0])]; {1 2} </code> ---- ==== Visualization ==== These methods are for visualization. ---- {{anchor:visual:}} ? **''VISUAL()''** :: Visualizes the fan, intersected with the unit ball. ? Options: : option list ''[[..:common#geometric_options_linear |geometric_options_linear]]'' ? Returns: :''[[..:fan:Visual_PolyhedralFan |Visual::PolyhedralFan]]'' ---- documentation/release/4.8/fan/hyperplanearrangement.txt Last modified: 2022/12/19 15:11by 127.0.0.1