             switch other.segment {
             case let .line(q1):
                 if let p = LineSegment(start, p1).intersect(LineSegment(other.start, q1)) {
-                    result = [(fromPoint(p), other.fromPoint(p))].compactMap(split_check)
+                    result = [(fromPoint(p), other._fromPoint(p))].compactMap(split_check)
                 }
             case let .quad(q1, q2):
                 if let t = QuadBezier(other.start, q1, q2).intersect(LineSegment(start, p1), in: -0.5...1.5) {

            switch other.segment {
            case let .line(q1):
                if let t = CubicBezier(start, p1, p2, p3).intersect(LineSegment(other.start, q1), in: -0.5...1.5) {
                    result = t.map { ($0, other.fromPoint(CubicBezier(start, p1, p2, p3).eval($0))) }.compactMap(split_check).sorted { $0.0 }
                }
            case let .quad(q1, q2):
                if let t = CubicBezier(start, p1, p2, p3).intersect(QuadBezier(other.start, q1, q2), in: -0.5...1.5) {
                    result = t.map { ($0, other.fromPoint(CubicBezier(start, p1, p2, p3).eval($0))) }.compactMap(split_check).sorted { $0.0 }
                }
            case let .cubic(q1, q2, q3):
                if let t = CubicBezier(start, p1, p2, p3).intersect(CubicBezier(other.start, q1, q2, q3), in: -0.5...1.5) {
                    result = t.map { ($0, other.fromPoint(CubicBezier(start, p1, p2, p3).eval($0))) }.compactMap(split_check).sorted { $0.0 }
                }
            }
        }

    }
    
    @inlinable
    func _fromPoint(_ p: Point) -> Double? {
        let _closest = self._closest(p)
        return _closest.first { p.almostEqual(self.point($0)) } ?? _closest.first
    }
    
    @inlinable
    public func fromPoint(_ p: Point) -> Double? {
        return self._closest(p).first { p.almostEqual(self.point($0)) }
    }
