code: func (l *Line) Project(point *Point) float64 {
  	if point.Equals(&l.a) {
  		return 0.0
  	}
  
  	if point.Equals(&l.b) {
  		return 1.0
  	}
  
  	dx := l.b[0] - l.a[0]
  	dy := l.b[1] - l.a[1]
  	d := (dx*dx + dy*dy)
  	if d == 0 {
  		return 0
  	}
  
  	return ((point[0]-l.a[0])*dx + (point[1]-l.a[1])*dy) / d
  }
docs: // Project returns the normalized distance of the point on the line nearest the given point.
  // Returned values may be outside of [0,1]. This function is the opposite of Interpolate.