polylib: homogenization.c File Reference

# homogenization.c File Reference

`#include <assert.h>`
`#include <stdlib.h>`
`#include <string.h>`
`#include <polylib/polylib.h>`
`#include <polylib/homogenization.h>`

Go to the source code of this file.

## Functions
static evalue * | dehomogenize_periodic (enode *en)
| homogenization.c copyright 2004-2005 Bavo Nootaert
static evalue * | dehomogenize_polynomial (enode *en)
| dehomogenize a polynomial.
Polyhedron * | homogenize (Polyhedron *P, unsigned MAXRAYS)
void | dehomogenize_evalue (evalue *ep, int nb_param)
| dehomogenize an evalue.
void | dehomogenize_enode (enode *p, int nb_param)
| dehomogenize all evalues in an enode.
Polyhedron * | dehomogenize_polyhedron (Polyhedron *p, int maxRays)
| dehomogenize a polyhedron.
void | dehomogenize_enumeration (Enumeration *en, int nb_params, int maxRays)
| dehomogenize an enumeration.

## Function Documentation

void dehomogenize_enode | ( | enode * | p,
|  | int | nb_param |
| ) |  |  |

dehomogenize all evalues in an enode.

This function is mutually recursive with dehomogenize_evalue.

Definition at line 77 of file homogenization.c.

References _enode::arr, dehomogenize_evalue(), and _enode::size.

Referenced by dehomogenize_evalue().

void dehomogenize_enumeration | ( | Enumeration * | en,
|  | int | nb_params,
|  | int | maxRays |
| ) |  |  |

dehomogenize an enumeration.

Replaces each validity domain and Ehrhart polynomial in the Enumeration en with the dehomogenized form.

Definition at line 172 of file homogenization.c.

References dehomogenize_evalue(), dehomogenize_polyhedron(), _enumeration::EP, _enumeration::next, Polyhedron_Free(), and _enumeration::ValidityDomain.

Referenced by main().

void dehomogenize_evalue | ( | evalue * | ep,
|  | int | nb_param |
| ) |  |  |

dehomogenize an evalue.

The last parameter (nb_param) is replaced by 1. This function is mutually recursive with dehomogenize_enode.

cannot dehomogenize rationals

we need to replace the last parameter

Not the last parameter. Recurse

Definition at line 48 of file homogenization.c.

References _evalue::d, dehomogenize_enode(), dehomogenize_periodic(), dehomogenize_polynomial(), free_evalue_refs(), periodic, and value_zero_p.

Referenced by dehomogenize_enode(), dehomogenize_enumeration(), and Polyhedron_Enumerate().

static evalue * dehomogenize_periodic | ( | enode * | en | ) | `[static]`

homogenization.c copyright 2004-2005 Bavo Nootaert

return the 1st element of an enode representing a periodic

Definition at line 87 of file homogenization.c.

References _enode::arr, assert, _evalue::d, periodic, _enode::size, _enode::type, value_assign, value_init, and value_notzero_p.

Referenced by dehomogenize_evalue().

Polyhedron* dehomogenize_polyhedron | ( | Polyhedron * | p,
|  | int | maxRays |
| ) |  |  |

dehomogenize a polyhedron.

Assume the polyhedron p is homogenous. Returns a new polyhedron.

Definition at line 155 of file homogenization.c.

References Constraints2Polyhedron(), Matrix_Alloc(), Matrix_Free(), matrix::NbColumns, matrix::NbRows, matrix::p, Polyhedron2Constraints(), and Vector_Copy().

Referenced by dehomogenize_enumeration().

static evalue * dehomogenize_polynomial | ( | enode * | en | ) | `[static]`

dehomogenize a polynomial.

Assume the enode contains a polynomial in one variable, the homogenous parameter. Returns an new evalue, representing a rational.

enumerate over all coefficients (which are either periodic or rational, but not polynomial)

add ev (fraction) to num/den

simplify num/den

create new evalue representing num/den

cleanup

Definition at line 102 of file homogenization.c.

References _enode::arr, assert, _evalue::d, polynomial, _enode::size, _enode::type, value_addto, value_assign, value_clear, value_divexact, value_gcd, value_init, value_multiply, value_set_si, and value_zero_p.

Referenced by dehomogenize_evalue().

Polyhedron* homogenize | ( | Polyhedron * | P,
|  | unsigned | MAXRAYS |
| ) |  |  |

Definition at line 31 of file homogenization.c.

References AddANullColumn(), polyhedron::Constraint, Constraints2Polyhedron(), polyhedron::Dimension, Matrix_Free(), matrix::NbColumns, polyhedron::NbConstraints, matrix::NbRows, matrix::p, polyhedron::p_Init, and matrix::p_Init.

Referenced by Polyhedron_Enumerate().