type t = { p: Gg.v2 ; size : float ; angle: float ; stamp : float } let empty = { p = Gg.V2.of_tuple (0., 0.) ; size = 0. ; angle = 0. ; stamp = 0. } let create ~angle ~width ~stamp ~x ~y = { p = Gg.V2.v x y ; size = width ; angle = Gg.Float.rad_of_deg (180. -. angle ) ; stamp } let copy point p = { point with p } let set_angle p angle = { p with angle = Gg.Float.rad_of_deg (180. -. angle) } let get_angle { angle; _} = 180. -. (Gg.Float.deg_of_rad angle) let set_width p size = { p with size } let get_width { size; _} = size let (+) p1 p2 = { p1 with p = Gg.V2.(+) p1.p p2 } let get_coord { p; _ } = p let get_stamp { stamp; _} = stamp let get_coord' : t -> Gg.v2 = fun t -> let open Gg.V2 in let trans = of_polar @@ v t.size t.angle in t.p + trans