示例#1
0
  public static boolean addOne(Vertex p) {
    boolean visible = false;

    // mark from p visible faces
    QueueElement<Face> wf = ConvexHull.faces.getFirst();
    while (wf.getNext() != null) {
      Face f = wf.getElem();
      if (volume(f, p) < 0) {
        f.visible = true;
        visible = true;
      }
      wf = wf.getNext();
    }

    // no faces visible, p is inside of hull
    if (!visible) {
      p.onhull = false;
      return false;
    }

    QueueElement<Edge> we = ConvexHull.edges.getFirst();
    while (we.getNext() != null) {
      Edge e = we.getElem();
      if (e.getAdjface(0).visible && e.getAdjface(1).visible) {
        e.deleted = true;
      } else {
        if (e.getAdjface(0).visible || e.getAdjface(1).visible) {
          e.newface = makeStructs(e, p);
        }
      }
      we = we.getNext();
    }

    return true;
  }