示例#1
0
        private Triangle GetTriangleAt(TriangleIndex tri)
        {
            var result = new Triangle {
                a = Points[tri.a], b = Points[tri.b], c = Points[tri.c]
            };

            return(result);
        }
示例#2
0
        private TriangleIndex GetTriangleIndex(int middleVertex)
        {
            var previous = middleVertex == 0 ? validCount - 1 : middleVertex - 1;
            var next     = middleVertex == validCount - 1 ? 0 : middleVertex + 1;
            var result   = new TriangleIndex {
                a = previous, b = middleVertex, c = next
            };

            return(result);
        }
示例#3
0
        private TriangleIndex LowestTri()
        {
            if (lowest != null)
            {
                return(lowest);
            }
            var lowestIndex = LowestVertex();

            lowest = GetTriangleIndex(lowestIndex);
            return(lowest);
        }
示例#4
0
        private bool IsConvex(TriangleIndex tri)
        {
            //if (OrientCCW(middleVertex) * OrientCCW(LowestVertex()) > 0)
            //not xor is same as above with lower cpu & mem footprint
            if (!(OrientCCW(tri) ^ LowestCCWOrient()))
            {
                return(true);
            }

            return(false);
        }
示例#5
0
        private bool IsEmpty(TriangleIndex tri)
        {
            var previous     = tri.a;
            var middleVertex = tri.b;
            var next         = tri.c;
            var tsv          = SignCCW(previous, middleVertex, next);

            for (int i = 0; i < validCount; i++)
            {
                if (i == previous || i == middleVertex || i == next)
                {
                    continue;
                }
                if (tsv * SignCCW(middleVertex, previous, i) >= 0 &&
                    tsv * SignCCW(previous, next, i) >= 0 &&
                    tsv * SignCCW(next, middleVertex, i) >= 0)
                {
                    return(false);//vertex i is inside triangle with middle vertex at middleVertex
                }
            }

            return(true);
        }
示例#6
0
 private bool OrientCCW(TriangleIndex tri)
 {
     return(ccw(tri.a, tri.b, tri.c) > 0);
 }