Class QuadEdgeTriangle


  • public class QuadEdgeTriangle
    extends java.lang.Object
    Models a triangle formed from QuadEdges in a QuadEdgeSubdivision which forms a triangulation. The class provides methods to access the topological and geometric properties of the triangle and its neighbours in the triangulation. Triangle vertices are ordered in CCW orientation in the structure.

    QuadEdgeTriangles support having an external data attribute attached to them. Alternatively, this class can be subclassed and attributes can be defined in the subclass. Subclasses will need to define their own BuilderVisitor class and createOn method.

    Version:
    1.0
    Author:
    Martin Davis
    • Constructor Detail

      • QuadEdgeTriangle

        public QuadEdgeTriangle​(QuadEdge[] edge)
        Creates a new triangle from the given edges.
        Parameters:
        edge - an array of the edges of the triangle in CCW order
    • Method Detail

      • createOn

        public static java.util.List createOn​(QuadEdgeSubdivision subdiv)
        Creates QuadEdgeTriangles for all facets of a QuadEdgeSubdivision representing a triangulation. The data attributes of the QuadEdges in the subdivision will be set to point to the triangle which contains that edge. This allows tracing the neighbour triangles of any given triangle.
        Parameters:
        subdiv - the QuadEdgeSubdivision to create the triangles on.
        Returns:
        a List of the created QuadEdgeTriangles
      • contains

        public static boolean contains​(Vertex[] tri,
                                       Coordinate pt)
        Tests whether the point pt is contained in the triangle defined by 3 Vertexes.
        Parameters:
        tri - an array containing at least 3 Vertexes
        pt - the point to test
        Returns:
        true if the point is contained in the triangle
      • contains

        public static boolean contains​(QuadEdge[] tri,
                                       Coordinate pt)
        Tests whether the point pt is contained in the triangle defined by 3 QuadEdgees.
        Parameters:
        tri - an array containing at least 3 QuadEdges
        pt - the point to test
        Returns:
        true if the point is contained in the triangle
      • nextIndex

        public static int nextIndex​(int index)
        Finds the next index around the triangle. Index may be an edge or vertex index.
        Parameters:
        index -
        Returns:
        the next index
      • setData

        public void setData​(java.lang.Object data)
        Sets the external data value for this triangle.
        Parameters:
        data - an object containing external data
      • getData

        public java.lang.Object getData()
        Gets the external data value for this triangle.
        Returns:
        the data object
      • kill

        public void kill()
      • isLive

        public boolean isLive()
      • getEdges

        public QuadEdge[] getEdges()
      • getEdge

        public QuadEdge getEdge​(int i)
      • getVertex

        public Vertex getVertex​(int i)
      • getVertices

        public Vertex[] getVertices()
        Gets the vertices for this triangle.
        Returns:
        a new array containing the triangle vertices
      • getCoordinate

        public Coordinate getCoordinate​(int i)
      • getEdgeIndex

        public int getEdgeIndex​(QuadEdge e)
        Gets the index for the given edge of this triangle
        Parameters:
        e - a QuadEdge
        Returns:
        the index of the edge in this triangle or -1 if the edge is not an edge of this triangle
      • getEdgeIndex

        public int getEdgeIndex​(Vertex v)
        Gets the index for the edge that starts at vertex v.
        Parameters:
        v - the vertex to find the edge for
        Returns:
        the index of the edge starting at the vertex or -1 if the vertex is not in the triangle
      • getEdgeSegment

        public void getEdgeSegment​(int i,
                                   LineSegment seg)
      • getCoordinates

        public Coordinate[] getCoordinates()
      • contains

        public boolean contains​(Coordinate pt)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • isBorder

        public boolean isBorder()
        Tests whether this triangle is adjacent to the outside of the subdivision.
        Returns:
        true if the triangle is adjacent to the subdivision exterior
      • isBorder

        public boolean isBorder​(int i)
      • getAdjacentTriangleAcrossEdge

        public QuadEdgeTriangle getAdjacentTriangleAcrossEdge​(int edgeIndex)
      • getAdjacentTriangleEdgeIndex

        public int getAdjacentTriangleEdgeIndex​(int i)
      • getTrianglesAdjacentToVertex

        public java.util.List getTrianglesAdjacentToVertex​(int vertexIndex)
        Gets the triangles which are adjacent (include) to a given vertex of this triangle.
        Parameters:
        vertexIndex - the vertex to query
        Returns:
        a list of the vertex-adjacent triangles
      • getNeighbours

        public QuadEdgeTriangle[] getNeighbours()
        Gets the neighbours of this triangle. If there is no neighbour triangle, the array element is null
        Returns:
        an array containing the 3 neighbours of this triangle