package body Floating_Support_Functions is
function Maximal_Support ( l : List; v : Vector ) return double_float is
sp,max : double_float;
tmp : List;
begin
if not Is_Null(l)
then max := Head_Of(l).all*v;
tmp := Tail_Of(l);
while not Is_Null(tmp) loop
sp := Head_Of(tmp).all*v;
if sp > max
then max := sp;
end if;
tmp := Tail_Of(tmp);
end loop;
return max;
else return 0.0;
end if;
end Maximal_Support;
function Minimal_Support ( l : List; v : Vector ) return double_float is
sp,min : double_float;
tmp : List;
begin
if not Is_Null(l)
then min := Head_Of(l).all*v;
tmp := Tail_Of(l);
while not Is_Null(tmp) loop
sp := Head_Of(tmp).all*v;
if sp < min
then min := sp;
end if;
tmp := Tail_Of(tmp);
end loop;
return min;
else return 0.0;
end if;
end Minimal_Support;
function Face ( l : List; v : Vector; m,tol : double_float ) return List is
res,tmp,res_last : List;
d : Vector(v'range);
begin
tmp := l;
while not Is_Null(tmp) loop
d := Head_Of(tmp).all;
if abs(d*v - m) < tol
then Append(res,res_last,d);
end if;
tmp := Tail_Of(tmp);
end loop;
return res;
end Face;
end Floating_Support_Functions;