Exemple #1
0
    def test_gjk_distance (self):
        a = CrankShape.Shape2CPolygon.new( [
            CrankBase.VecFloat2.init (2, 1),
            CrankBase.VecFloat2.init (-2, 1),
            CrankBase.VecFloat2.init (-3, 0),
            CrankBase.VecFloat2.init (-3, -1),
            CrankBase.VecFloat2.init (-1, -2),
            CrankBase.VecFloat2.init (2, -1)
        ] )
        b = CrankShape.Shape2CPolygon.new( [
            CrankBase.VecFloat2.init (2, 3),
            CrankBase.VecFloat2.init (1, 3),
            CrankBase.VecFloat2.init (-2, 1),
            CrankBase.VecFloat2.init (-2, -1),
            CrankBase.VecFloat2.init (-1, -2),
            CrankBase.VecFloat2.init (0, -2),
            CrankBase.VecFloat2.init (2, 0)
        ])

        apos = CrankShape.Trans2.init ();
        bpos = CrankShape.Trans2.init ();

        apos.mtrans = CrankBase.VecFloat2.init (-2, 1)
        bpos.mtrans = CrankBase.VecFloat2.init (3, 2)

        abpos = apos.inverse().compose (bpos)

        self.assertFloat (CrankShape.gjk2_distance (a, b, abpos), 1.0)


        bpos.mrot = math.pi * 7 / 12

        abpos = apos.inverse().compose (bpos);

        self.assertFloat (CrankShape.gjk2_distance (a, b, abpos), 0.0389)


        apos.mtrans = CrankBase.VecFloat2.init (-5, 3)
        bpos.mtrans = CrankBase.VecFloat2.init (0, -2)
        apos.mrot = math.pi * 2 / 3
        bpos.mrot = math.pi * 7 / 12
        apos.mscl = 0.5
        bpos.mscl = 2

        abpos = apos.inverse().compose (bpos);

        self.assertFloat (CrankShape.gjk2_distance (a, b, abpos), 1.3496)