anchor.diff:           circular/4,
            linear/4,
            uniform_walk/4,
  +         normal_walk/4,
            compose/2
           ]).
   
  
positive.code: 
  uniform_walk(_Id, X, Y, P = #payload{pos_noise = N}) ->
    {
      X + math:sqrt(N) * uniform_noise(),
      Y + math:sqrt(N) * uniform_noise(),
      P
    }.
  
  
negative.code: 
  uniform_noise() ->
    random:uniform() - 0.5.
  
  % naive-ish box-muller transform
  normal_noise() ->
    U1 = random:uniform(),
    U2 = random:uniform(),
    math:sqrt(-2.0*math:log(U1)) * math:cos(2.0 * math:pi() * U2).
  