Exemple #1
0
    def test_gjk (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)

        assert (not CrankShape.gjk2 (a, b, abpos))

        bpos.mrot = math.pi * 7 / 6

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

        assert (not CrankShape.gjk2 (a, b, abpos))

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

        abpos = apos.inverse().compose (bpos);
        assert (CrankShape.gjk2 (a, b, abpos))