Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Dynlift/minkowski_polynomials.adb, Revision 1.1
1.1 ! maekawa 1: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
! 2: with Standard_Complex_Numbers; use Standard_Complex_Numbers;
! 3: with Standard_Natural_Vectors;
! 4: with Cayley_Embedding; use Cayley_Embedding;
! 5: with Mixed_Volume_Computation; use Mixed_Volume_Computation;
! 6:
! 7: package body Minkowski_Polynomials is
! 8:
! 9: function Minkowski_Polynomial ( n,r : natural ) return Poly is
! 10:
! 11: res : Poly := Null_Poly;
! 12: acc : Degrees := new Standard_Natural_Vectors.Vector'(1..r => 0);
! 13:
! 14: procedure Generate_Monomials
! 15: ( k,sum : in natural; deg : in out Degrees ) is
! 16:
! 17: -- DESCRIPTION :
! 18: -- Generates all exponent vectors whose sum equals n.
! 19:
! 20: t : Term;
! 21:
! 22: begin
! 23: if k = r
! 24: then t.cf := Create(1.0);
! 25: deg(r) := n-sum;
! 26: t.dg := deg;
! 27: Add(res,t);
! 28: else for i in 0..(n-sum) loop
! 29: deg(k) := i;
! 30: Generate_Monomials(k+1,sum+i,deg);
! 31: end loop;
! 32: end if;
! 33: end Generate_Monomials;
! 34:
! 35: begin
! 36: Generate_Monomials(1,0,acc);
! 37: Standard_Natural_Vectors.Clear
! 38: (Standard_Natural_Vectors.Link_to_Vector(acc));
! 39: return res;
! 40: end Minkowski_Polynomial;
! 41:
! 42: function Convert ( dg : Degrees ) return Standard_Integer_Vectors.Vector is
! 43:
! 44: -- DESCRIPTION :
! 45: -- Converts the degrees vector to a vector with integer numbers.
! 46:
! 47: res : Standard_Integer_Vectors.Vector(dg'range);
! 48:
! 49: begin
! 50: for i in res'range loop
! 51: res(i) := dg(i);
! 52: end loop;
! 53: return res;
! 54: end Convert;
! 55:
! 56: procedure Minkowski_Polynomial
! 57: ( p : in out Poly; t : in Triangulation; n : in natural;
! 58: mix : in Vector; mixsub : out Mixed_Subdivision ) is
! 59:
! 60: procedure Coefficient_Volume
! 61: ( submix : in Vector; sub : in Mixed_Subdivision;
! 62: vol : out natural ) is
! 63: begin
! 64: vol := Mixed_Volume(n,submix,sub);
! 65: end Coefficient_Volume;
! 66: procedure Coefficient_Volumes is
! 67: new Minkowski_Polynomial_Subdivisions(Coefficient_Volume);
! 68:
! 69: begin
! 70: Coefficient_Volumes(p,t,n,mix,mixsub);
! 71: end Minkowski_Polynomial;
! 72:
! 73: procedure Minkowski_Polynomial_Subdivisions
! 74: ( p : in out Poly; t : in Triangulation; n : in natural;
! 75: mix : in Vector; mixsub : out Mixed_Subdivision ) is
! 76:
! 77: procedure Coefficient_Volume ( tt : in out Term; cont : out boolean ) is
! 78:
! 79: wrkmix : Vector(mix'range) := Convert(tt.dg);
! 80: wrksub : Mixed_Subdivision := Extract_Mixed_Cells(n,wrkmix,t);
! 81: vol : natural;
! 82:
! 83: begin
! 84: Deflate(n,wrksub);
! 85: Process(wrkmix,wrksub,vol);
! 86: tt.cf := Create(double_float(vol));
! 87: if wrkmix = mix
! 88: then mixsub := wrksub;
! 89: else Deep_Clear(wrksub);
! 90: end if;
! 91: cont := true;
! 92: end Coefficient_Volume;
! 93: procedure Coefficient_Volumes is new Changing_Iterator(Coefficient_Volume);
! 94:
! 95: begin
! 96: Coefficient_Volumes(p);
! 97: end Minkowski_Polynomial_Subdivisions;
! 98:
! 99: end Minkowski_Polynomials;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>