code: func (s *Surface) ValueAt(point *Point) float64 {
  	if !s.bound.Contains(point) {
  		return 0
  	}
  
  	// find height and width
  	xi, yi, w, h := s.gridCoordinate(point)
  
  	xi1 := xi + 1
  	if limit := s.Width - 1; xi1 > limit {
  		xi1 = limit
  	}
  
  	yi1 := yi + 1
  	if limit := s.Height - 1; yi1 > limit {
  		yi1 = limit
  	}
  
  	w1 := s.Grid[xi][yi]*(1-w) + s.Grid[xi1][yi]*w
  	w2 := s.Grid[xi][yi1]*(1-w) + s.Grid[xi1][yi1]*w
  
  	return w1*(1-h) + w2*h
  }
docs: // ValueAt returns the bi-linearly interpolated value for
  // the given point. Returns 0 if the point is out of surface bounds
  // TODO: cleanup and optimize this code