let add_in_zone (abs : float) (ord : float) (y : float list) : unit = 
        let min_l l = List.fold_left min (car l) (cdr l) in
        let max_l l = List.fold_left max (car l) (cdr l) in
        let zone_length = (max_l y) -. (min_l y) in
        let dist = zone_length -. (min zone_length ( ( (float_of_int (number_of_common_line_between_all_zones abs ord)) -. 0.) *. !yDelta )) in
        let rec aux l_infos_zones res =
                match l_infos_zones with [] -> List.rev res
                        |(((absX,ordY),points_list)::ls) ->
                                if(ordY <= ord)
                                then aux ls (((absX,(ordY -. dist)),(List.map (fun p -> p -. dist) points_list))::res)
                                else aux ls (((absX,ordY),points_list)::res)
        in         
        let lock = ref true in
        List.iter
        (fun ((role_x,tag_pos),zone) ->
        if (role_x <> abs && tag_pos=ord && ((max_l zone) -. (min_l zone)) >= zone_length)
        then lock:=false)
        (!infos_zones);        
        if(!lock) then ( 
                        infos_zones:= aux (!infos_zones) []
                );

        let ord_zone = if(!lock) then (ord -. dist) else ord in
        if not(List.mem (abs,ord_zone) (List.map (fun ((x,z),_) -> (x,z) ) (!infos_zones)))
        then infos_zones := ((abs,ord_zone),y)::(!infos_zones)
        else (
                let y2 = List.assoc (abs,ord_zone) (!infos_zones) in
                let y3 = y2@y in
                infos_zones := ((abs,ord_zone),[(min_l y3) ; (max_l y3)])::(remove ((abs,ord_zone),y2) (!infos_zones))
                
        )