示例#1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="selection"></param>
 /// <param name="points"></param>
 /// <param name="dx"></param>
 /// <param name="dy"></param>
 /// <returns></returns>
 public static bool Overlap(Vector2[] selection, IList <XPoint> points, double dx, double dy)
 {
     Vector2[] vertices = GetVertices(points, dx, dy);
     return(sat.Overlap(selection, vertices));
 }
示例#2
0
        static void TestSat()
        {
            var sat = new SeparatingAxisTheorem();

            // shape1
            var shape1 = new Polygon();

            shape1.Vertices    = new Vector2[4];
            shape1.Vertices[0] = new Vector2(0.0, 0.0);
            shape1.Vertices[1] = new Vector2(10.0, 0.0);
            shape1.Vertices[2] = new Vector2(10.0, 10.0);
            shape1.Vertices[3] = new Vector2(0.0, 10.0);

            // shape2
            var shape2 = new Polygon();

            shape2.Vertices = new Vector2[4];

            // overlaps
            //shape2.Vertices[0] = new Vector2(5.0, 5.0);
            //shape2.Vertices[1] = new Vector2(20.0, 5.0);
            //shape2.Vertices[2] = new Vector2(20.0, 20.0);
            //shape2.Vertices[3] = new Vector2(5.0, 20.0);

            // do not overlaps
            //shape2.Vertices[0] = new Vector2(15.0, 5.0);
            //shape2.Vertices[1] = new Vector2(20.0, 5.0);
            //shape2.Vertices[2] = new Vector2(20.0, 20.0);
            //shape2.Vertices[3] = new Vector2(15.0, 20.0);

            // shape1 contains shape2
            shape2.Vertices[0] = new Vector2(2.0, 2.0);
            shape2.Vertices[1] = new Vector2(8.0, 2.0);
            shape2.Vertices[2] = new Vector2(8.0, 8.0);
            shape2.Vertices[3] = new Vector2(2.0, 8.0);

            // sat get axes
            //var axes1 = sat.GetAxes(shape1.Vertices);
            //var axes2 = sat.GetAxes(shape2.Vertices);
            //Console.WriteLine("axes1:");
            //foreach(var axis in axes1) Console.WriteLine(axis);
            //Console.WriteLine("axes2:");
            //foreach(var axis in axes2) Console.WriteLine(axis);

            // sat overlap
            bool overlap = sat.Overlap(shape1.Vertices, shape2.Vertices);

            Console.WriteLine("overlap: " + overlap);

            //TestSatProjectionGetOverlap();

            // sat mtv
            MinimumTranslationVector?mtv;
            bool overlapMTV = sat.MinimumTranslationVector(
                shape1.Vertices,
                shape2.Vertices,
                out mtv);

            Console.WriteLine("overlapMTV: " + overlapMTV);
            if (mtv.HasValue)
            {
                Console.WriteLine("mtv.overlap: " + mtv.Value.Overlap);
                Console.WriteLine("mtv.smallest: " + mtv.Value.Smallest);
            }

            // sat mtv with containment
            MinimumTranslationVector?mtvContainment;
            bool overlapMTVContainment = sat.MinimumTranslationVectorWithContainment(
                shape1.Vertices,
                shape2.Vertices,
                out mtvContainment);

            Console.WriteLine("overlapMTVContainment: " + overlapMTVContainment);
            if (mtv.HasValue)
            {
                Console.WriteLine("mtvContainment.overlap: " + mtvContainment.Value.Overlap);
                Console.WriteLine("mtvContainment.smallest: " + mtvContainment.Value.Smallest);
            }
        }