   f(x) for x in ar
 
 dup = (obj) ->
+  return null unless obj?
   if ( obj instanceof Array )
     map obj, (o) -> dup o
   else if ( typeof obj == 'object' )

  margins: ->
    m = @marges ?= []
    return m if m.length
    fi = PI * @visualAngle() / 2
    t1 = @angle - fi
    t1 = @universe.tp( sin(t1), cos(t1) )
    t2 = @angle + fi

      return if isAbove then QT else 3 * QT
    if @y == t.y
      return if isBefore then 0 else PI
    theta = degrees acos abs( @x - t.x ) / @dist(t)
    if isAbove
      if isBefore then theta else 180 - theta
    else
      if isBefore then 360 - theta else 180 + theta
  relativeGeometry: (t) ->
    offset = @others[t.id]
    if offset
      distance: @universe.geoData[offset]
      sine:     @universe.geoData[offset + 1]
      cosine:   @universe.geoData[offset + 2]
      segment:  @universe.geoData[offset + 3]
    else
      'beyond maximum distance considered'

class Stone extends Thing
  constructor: ( location, options = {} ) ->
