/**
  * computes opposite halfEdge for the given half edge.
  *
  * @param halfEdge the halfEdge to compute the opposite for.
  * @return the opposite HalfEdge to the given one.
  */
 private HalfEdge computeOppositeHalfEdge(HalfEdge halfEdge) {
   Vertex destination = halfEdge.getNext().getStartVertex();
   for (HalfEdge opposite : halfEdges) {
     if (!halfEdge.equals(opposite) && opposite.getStartVertex().equals(destination)) {
       if (opposite.getNext().getStartVertex().equals(halfEdge.getStartVertex())) {
         return opposite;
       }
     }
   }
   return null;
 }
 public void computeVertexNormals() {
   for (HalfEdge first : halfEdges) {
     HalfEdge cur = first;
     Vector3 sum = cur.getFacet().getNormal();
     do {
       cur = cur.getOpposite().getNext();
       sum.add(cur.getFacet().getNormal());
     } while (cur != first);
     first.getStartVertex().setNormal(sum.getNormalized());
   }
 }