     }
 }
 
-/// Move up to `dn-m/GeometryTools`.
+/// - TODO: Move up to `dn-m/GeometryTools`.
 extension Point {
+
+    /// - TODO: Move up to `dn-m/GeometryTools`.
+    public static func + (lhs: Point, rhs: Point) -> Point {
+        return Point(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
+    }
+    
+    /// - TODO: Move up to `dn-m/GeometryTools`.
+    public static func - (lhs: Point, rhs: Point) -> Point {
+        return Point(x: lhs.x - rhs.x, y: lhs.y - rhs.y)
+    }
+    
+    /// - TODO: Move up to `dn-m/GeometryTools`.
     public subscript (axis: Axis) -> Double {
         return axis == .horizontal ? x : y
     }
+}
+
+/// - TODO: Move up to `dn-m/GeometryTools`.
+func * (point: Point, multiplier: Double) -> Point {
+    return Point(x: point.x * multiplier, y: point.y * multiplier)
+}
+
+/// - TODO: Move up to `dn-m/GeometryTools`.
+func * (multiplicand: Double, point: Point) -> Point {
+    return Point(x: point.x * multiplicand, y: point.y * multiplicand)
+}
+
+/// - TODO: Move up to `dn-m/GeometryTools`.
+func / (point: Point, multiplier: Double) -> Point {
+    return Point(x: point.x / multiplier, y: point.y / multiplier)
+}
+
+/// - TODO: Move up to `dn-m/GeometryTools`.
+func / (multiplicand: Double, point: Point) -> Point {
+    return Point(x: point.x / multiplicand, y: point.y / multiplicand)
 }
 
 /// - returns: A `Set` of 0, 1, or 2 x-intercepts for the given coefficients.

        self.start = start
        self.end = end
        self.control = control
        self.solver = Solver(
            start: start,
            end: end,
            controlPoint: control
        )
    }
    
    /// - Returns: `Point` at the given `t` value.

        func ys(x: Double) -> Set<Double> {
            return quadratic(a.x, b.x, c.x - x)
        }
    }
    
    private let solver: Solver
