code: func (l Line) Intersect(k Line) (Vec, bool) {
  	// Check if the lines are parallel
  	lDir := l.A.To(l.B)
  	kDir := k.A.To(k.B)
  	if lDir.X == kDir.X && lDir.Y == kDir.Y {
  		return ZV, false
  	}
  
  	// The lines intersect - but potentially not within the line segments.
  	// Get the intersection point for the lines if they were infinitely long, check if the point exists on both of the
  	// segments
  	lm, lb := l.Formula()
  	km, kb := k.Formula()
  
  	// Account for vertical lines
  	if math.IsInf(math.Abs(lm), 1) && math.IsInf(math.Abs(km), 1) {
  		// Both vertical, therefore parallel
  		return ZV, false
  	}
  
  	var x, y float64
  
  	if math.IsInf(math.Abs(lm), 1) || math.IsInf(math.Abs(km), 1) {
  		// One line is vertical
  		intersectM := lm
  		intersectB := lb
  		verticalLine := k
  
  		if math.IsInf(math.Abs(lm), 1) {
  			intersectM = km
  			intersectB = kb
  			verticalLine = l
  		}
  
  		y = intersectM*verticalLine.A.X + intersectB
  		x = verticalLine.A.X
  	} else {
  		// Coordinates of intersect
  		x = (kb - lb) / (lm - km)
  		y = lm*x + lb
  	}
  
  	if l.Contains(V(x, y)) && k.Contains(V(x, y)) {
  		// The intersect point is on both line segments, they intersect.
  		return V(x, y), true
  	}
  
  	return ZV, false
  }
docs: // Intersect will return the point of intersection for the two line segments.  If the line segments do not intersect,
  // this function will return the zero-vector and false.