Skip to content

Commit

Permalink
PolyhedralGeometry: simplified operations with PolyhedralFan
Browse files Browse the repository at this point in the history
  • Loading branch information
YueRen committed Jan 14, 2025
1 parent 9da4d3c commit 81c6bc0
Showing 1 changed file with 8 additions and 17 deletions.
25 changes: 8 additions & 17 deletions src/PolyhedralGeometry/PolyhedralFan/standard_constructions.jl
Original file line number Diff line number Diff line change
Expand Up @@ -411,35 +411,26 @@ end
## Scalar multiplication
###############################################################################

function multiply_by_nonzero_scalar(u::PointVector{QQFieldElem}, c::QQFieldElem)
return u .* c
end
function multiply_by_nonzero_scalar(u::RayVector{QQFieldElem}, c::QQFieldElem)
return (c<0 ? -u : u)
end

function *(c::QQFieldElem, Sigma::PolyhedralFan)
# if scalar is zero, return polyhedral complex consisting only of the origin
function *(c::scalar_types_extended, Sigma::PolyhedralFan)
# if scalar is zero, return polyhedral fan consisting only of the origin
if iszero(c)
return polyhedral_complex(convex_hull(zero_matrix(QQ,1,ambient_dim(Sigma))))
return polyhedral_fan(positive_hull(zero_matrix(coefficient_field(Sigma),1,ambient_dim(Sigma))))
end

# if scalar is non-zero, multiple all vertices and rays by said scalar
# if scalar is non-zero, multiple all rays by said scalar
SigmaRays = first(rays_modulo_lineality(Sigma))
SigmaLineality = lineality_space(Sigma)
SigmaIncidence = maximal_cones(IncidenceMatrix,Sigma)
return polyhedral_fan(SigmaIncidence, multiply_by_nonzero_scalar.(SigmaRays,c), SigmaLineality)
return polyhedral_fan(coefficient_field(Sigma), SigmaIncidence, SigmaRays .* c, SigmaLineality)
end
*(c::RationalUnion, Sigma::PolyhedralFan) = QQ(c)*Sigma
*(Sigma::PolyhedralFan,c::RationalUnion) = c*Sigma
*(Sigma::PolyhedralFan,c::scalar_types_extended) = c*Sigma

###############################################################################
## Negation
###############################################################################

function -(Sigma::PolyhedralFan)
SigmaRays = first(rays_modulo_lineality(Sigma))
SigmaLineality = lineality_space(Sigma)
SigmaRays, SigmaLineality = first(rays_modulo_lineality(Sigma))
SigmaIncidence = maximal_cones(IncidenceMatrix,Sigma)
return polyhedral_fan(SigmaIncidence, -SigmaRays, SigmaLineality)
return polyhedral_fan(coefficient_field(Sigma), SigmaIncidence, -SigmaRays, SigmaLineality)
end

0 comments on commit 81c6bc0

Please sign in to comment.