   plus:  (p)  -> new Point2d @x + p.x, @y + p.y
   minus: (p)  -> new Point2d @x - p.x, @y - p.y
   times: (f)  -> new Point2d @x * f, @y * f
+
+  # The method `lift` computes the projection or _lift_ of this point onto the
+  # standard parabola z = x * x + y * y.
+  memo @, 'lift', -> new Point3d @x, @y, @x * @x + @y * @y
+
   equals: (p) -> @constructor == p?.constructor and @x == p.x and @y == p.y
 
   memo @, 'toString', -> "(#{@x}, #{@y})"

      else if c.isInfinite() or d.isInfinite()
        false
      else
        inclusionInCircumCircle(a, b, c, d) > 0

    # The private function `subdivide` takes a triangulation `T`, a triangle
    # `t` and a site `p` inside that triangle and creates a new triangulation

exports ?= this.pazy ?= {}
exports.Point2d = Point2d
exports.delaunayTriangulation = delaunayTriangulation

# ----

