addVertexToHull (eyeVertex) {
    const horizon = []

    this.unclaimed.clear()

    // remove `eyeVertex` from `eyeVertex.face` so that it can't be added to the
    // `unclaimed` vertex list
    this.removeVertexFromFace(eyeVertex, eyeVertex.face)
    this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon)
    this.addNewFaces(eyeVertex, horizon)

    // first merge pass
    // Do the merge with respect to the larger face
    for (let i = 0; i < this.newFaces.length; i += 1) {
      const face = this.newFaces[i]
      if (face.mark === VISIBLE) {
        while (this.doAdjacentMerge(face, MERGE_NON_CONVEX_WRT_LARGER_FACE)) {} // eslint-disable-line no-empty
      }
    }

    // second merge pass
    // Do the merge on non convex faces (a face is marked as non convex in the
    // first pass)
    for (let i = 0; i < this.newFaces.length; i += 1) {
      const face = this.newFaces[i]
      if (face.mark === NON_CONVEX) {
        face.mark = VISIBLE
        while (this.doAdjacentMerge(face, MERGE_NON_CONVEX)) {} // eslint-disable-line no-empty
      }
    }

    // reassign `unclaimed` vertices to the new faces
    this.resolveUnclaimedPoints(this.newFaces)
  }
Adds a vertex to the hull with the following algorithm

- Compute the `horizon` which is a chain of half edges, for an edge to
  belong to this group it must be the edge connecting a face that can
  see `eyeVertex` and a face which cannot see `eyeVertex`
- All the faces that can see `eyeVertex` have its visible vertices removed
  from the claimed VertexList
- A new set of faces is created with each edge of the `horizon` and
  `eyeVertex`, each face is connected with the opposite horizon face and
  the face on the left/right
- The new faces are merged if possible with the opposite horizon face first
  and then the faces on the right/left
- The vertices removed from all the visible faces are assigned to the new
  faces if possible

@param {Vertex} eyeVertex