code: func (c Circle) Intersect(d Circle) Circle {
  	// Check if one of the circles encompasses the other; if so, return that one
  	biggerC := maxCircle(c.Norm(), d.Norm())
  	smallerC := minCircle(c.Norm(), d.Norm())
  
  	if biggerC.Radius >= biggerC.Center.To(smallerC.Center).Len()+smallerC.Radius {
  		return biggerC
  	}
  
  	// Calculate the midpoint between the two radii
  	// Distance between centers
  	dist := c.Center.To(d.Center).Len()
  	// Difference between radii
  	diff := dist - (c.Radius + d.Radius)
  	// Distance from c.Center to the weighted midpoint
  	distToMidpoint := c.Radius + 0.5*diff
  	// Weighted midpoint
  	center := Lerp(c.Center, d.Center, distToMidpoint/dist)
  
  	// No need to calculate radius if the circles do not overlap
  	if c.Center.To(d.Center).Len() >= c.Radius+d.Radius {
  		return C(center, 0)
  	}
  
  	radius := c.Center.To(d.Center).Len() - (c.Radius + d.Radius)
  
  	return Circle{
  		Center: center,
  		Radius: math.Abs(radius),
  	}
  }
docs: // Intersect returns the maximal Circle which is covered by both `c` and `d`.
  //
  // If `c` and `d` don't overlap, this function returns a zero-sized circle at the centerpoint between the two Circle's
  // centers.