code: func NewSurface(bound *Bound, width, height int) *Surface {
  	s := &Surface{
  		bound:  bound.Clone(),
  		Width:  width,
  		Height: height,
  	}
  
  	s.Grid = make([][]float64, width)
  	points := make([]float64, width*height)
  
  	for i := range s.Grid {
  		s.Grid[i], points = points[:height], points[height:]
  	}
  
  	return s
  }
docs: // NewSurface build and allocates all the memory to create
  // a surface defined by the bound represented by width*height discrete points.
  // Note that surface.Grid[width-1][height-1] will be on the boundary of the bound.