Class Polygon
    
    
    Public
    
    Utility functions for working with polygons, lines, and other vector math. 
    All functions which accepts Vector3s but work in 2D space uses the XZ space if nothing else is said.
Version
A lot of functions in this class have been moved to the VectorMath class the names have changed slightly and everything now consistently assumes a left handed coordinate system now instead of sometimes using a left handed one and sometimes using a right handed one. This is why the 'Left' methods redirect to methods named 'Right'. The functionality is exactly the same. 
    
        Public Static Methods
            
            
                    
        
    Vector3
    ClosestPointOnTriangle 
            (        
)
    
    Closest point on the triangle abc to the point p. 
    See
'Real Time Collision Detection' by Christer Ericson, chapter 5.1, page 141 
     
             
            
            
                    
        
    Vector2
    ClosestPointOnTriangle 
            (        
)
    
    Closest point on the triangle abc to the point p. 
    See
'Real Time Collision Detection' by Christer Ericson, chapter 5.1, page 141 
     
             
            
            
                    
        
    Vector3
    ClosestPointOnTriangleXZ 
            (        
)
    
    Closest point on the triangle abc to the point p when seen from above. 
    See
'Real Time Collision Detection' by Christer Ericson, chapter 5.1, page 141 
     
             
            
            
                    
        
    void
    CompressMesh 
            (        
List<Int3>  |     vertices  |         Vertices of the input mesh   | 
                
List<int>  |     triangles  |         Triangles of the input mesh   | 
                
outInt3[]  |     outVertices  |         Vertices of the output mesh.   | 
                
out int[]  |     outTriangles  |         Triangles of the output mesh.  | 
                
        
)
    
    Compress the mesh by removing duplicate vertices. 
    
Vertices that differ by only 1 along the y coordinate will also be merged together. 
Warning
This function is not threadsafe. It uses some cached structures to reduce allocations. 
     
             
            
            
                    
        
    bool
    ContainsPoint 
            (        
)
    
    Checks if p is inside the polygon. 
    
     
             
            
            
                    
        
    bool
    ContainsPoint 
            (        
)
    
    Returns if the triangle ABC contains the point p. 
    The triangle vertices are assumed to be laid out in clockwise order. 
     
             
            
            
                    
        
    bool
    ContainsPointXZ 
            (        
)
    
    Checks if p is inside the polygon (XZ space). 
    
     
             
            
            
                    
        
    bool
    ContainsPointXZ 
            (        
)
    
    Returns if the triangle ABC contains the point p. 
    The triangle vertices are assumed to be laid out in clockwise order. 
     
             
            
            
                    
        
    bool
    ContainsPointXZ 
            (        
)
    
    Returns if the triangle ABC contains the point p in XZ space. 
    The triangle vertices are assumed to be laid out in clockwise order. 
     
             
            
            
                    
        
    Vector3[]
    ConvexHullXZ 
            (        
)
    
    Calculates convex hull in XZ space for the points. 
    Implemented using the very simple Gift Wrapping Algorithm which has a complexity of O(nh) where n is the number of points and h is the number of points on the hull, so it is in the worst case quadratic. 
     
             
            
            
                    
        
    int
    SampleYCoordinateInTriangle 
            (        
)
    
    Sample Y coordinate of the triangle (p1, p2, p3) at the point p in XZ space. 
    The y coordinate of p is ignored.
Return
The interpolated y coordinate unless the triangle is degenerate in which case a DivisionByZeroException will be thrown
     
             
            
            
                    
        
    void
    Subdivide 
            (        
)
    
    Divides each segment in the list into subSegments segments and fills the result list with the new points. 
    
     
             
            
            
                    
        
    void
    TraceContours 
            (        
Dictionary<int, int>  |     outline  |         outline[a] = b if there is an edge from a to b.   | 
                
HashSet<int>  |     hasInEdge  |         hasInEdge should contain b if outline[a] = b for any key a.   | 
                
System.Action<List<int >, bool>  |     results  |         Will be called once for each contour with the contour as a parameter as well as a boolean indicating if the contour is a cycle or a chain (see image).  | 
                
        
)
    
    Given a set of edges between vertices, follows those edges and returns them as chains and cycles. 
    
 
 
     
             
        Private/Protected Members
            
            
                    
        
    Dictionary<Int3, int>
    cached_Int3_int_dict = new Dictionary<Int3, int>()
    
    Cached dictionary to avoid excessive allocations.