private Polygon CreateThreePointPolygon(List<PointF> pointList)
        {
            PolyPoint p0 = new PolyPoint(pointList[0]);
            PolyPoint p1 = new PolyPoint(pointList[1]);
            PolyPoint p2 = new PolyPoint(pointList[2]);

            double zeroToOne = GetSlope(pointList[0], pointList[1]);
            double zeroToTwo = GetSlope(pointList[0], pointList[2]);

            // The slope of oneToOne is more negative
            // than oneToTwo. Thus, to maintain clockwise
            // order, pointList[1] is the PolyPoint.next
            // of pointList[0].
            if (zeroToOne < zeroToTwo)
            {
                p0.next = p1;
                p0.prev = p2;
                p1.next = p2;
                p1.prev = p0;
                p2.next = p0;
                p2.prev = p1;
            }
            else
            {
                p0.next = p2;
                p0.prev = p1;
                p1.next = p0;
                p1.prev = p2;
                p2.next = p1;
                p2.prev = p0;
            }

            return new Polygon(p0, p2);
        }
        private Polygon CreateTwoPointPolygon(List<PointF> pointList)
        {
            PolyPoint p1 = new PolyPoint(pointList[0]);
            PolyPoint p2 = new PolyPoint(pointList[1]);

            p1.next = p2;
            p1.prev = p2;

            p2.next = p1;
            p2.prev = p1;

            return new Polygon(p1, p2);
        }