コード例 #1
0
ファイル: test_gjk.py プロジェクト: WSID/crank-system
    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)
コード例 #2
0
ファイル: test_misc.py プロジェクト: WSID/crank-system
    def test_tri_bcoord (self):
        tri = [ CrankBase.VecFloat2.init (5, 4),
                CrankBase.VecFloat2.init (1, 2),
                CrankBase.VecFloat2.init (3, 6) ]

        pt = CrankBase.VecFloat2.init (3, 4)
        bcoord = CrankShape.tri_bcoord (tri, pt);

        self.assertFloat (bcoord.x, 0.3333);
        self.assertFloat (bcoord.y, 0.3333);
        self.assertFloat (bcoord.z, 0.3333);

        pt = CrankBase.VecFloat2.init (5, 12)
        bcoord = CrankShape.tri_bcoord (tri, pt);

        self.assertFloat (bcoord.x, -0.3333);
        self.assertFloat (bcoord.y, -1.3333);
        self.assertFloat (bcoord.z, 2.6667);
コード例 #3
0
ファイル: test_misc.py プロジェクト: WSID/crank-system
    def test_seg_intersect (self):
        aa = CrankBase.VecFloat2.init (3.0, 4.0)
        ab = CrankBase.VecFloat2.init (5.0, 12.0)
        ba = CrankBase.VecFloat2.init (12.0, 5.0)
        bb = CrankBase.VecFloat2.init (4.0, 3.0)

        (res, i) = CrankShape.seg_intersect (aa, ab, ba, bb)
        assert (not res)

        aa = CrankBase.VecFloat2.init (2.0, 1.0)
        ab = CrankBase.VecFloat2.init (5.0, 9.0)
        ba = CrankBase.VecFloat2.init (1.0, 5.0)
        bb = CrankBase.VecFloat2.init (4.0, 3.0)

        (res, i) = CrankShape.seg_intersect (aa, ab, ba, bb)
        assert (res)
        self.assertFloat (i.x, 3)
        self.assertFloat (i.y, (11.0 / 3.0))
コード例 #4
0
ファイル: test_gjk.py プロジェクト: WSID/crank-system
    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))
コード例 #5
0
ファイル: test_misc.py プロジェクト: WSID/crank-system
    def test_tetra_bcoord (self):
        tetra = [   CrankBase.VecFloat3.init (2, 3, 0),
                    CrankBase.VecFloat3.init (0, 1, 1),
                    CrankBase.VecFloat3.init (3, 1, 2),
                    CrankBase.VecFloat3.init (1, 2, 3)  ]

        pt = CrankBase.VecFloat3.init (2, 2, 2)
        bcoord = CrankShape.tetra_bcoord (tetra, pt)
        self.assertFloat (bcoord.x,  0.2667)
        self.assertFloat (bcoord.y, -0.0667)
        self.assertFloat (bcoord.z,  0.3333)
        self.assertFloat (bcoord.w,  0.4667)

        pt = CrankBase.VecFloat3.init (1, 1, 3)
        bcoord = CrankShape.tetra_bcoord (tetra, pt)
        self.assertFloat (bcoord.x, -0.3333)
        self.assertFloat (bcoord.y,  0.3333)
        self.assertFloat (bcoord.z,  0.3333)
        self.assertFloat (bcoord.w,  0.6667)
コード例 #6
0
ファイル: test_rot.py プロジェクト: WSID/crank-system
 def test_vec2_right (self):
     a = CrankBase.VecFloat2.init (0.9950, 0.0998)
     b = CrankShape.rot_vec2_right (a)
     self.assertFloat (b.x, 0.0998)
     self.assertFloat (b.y, -0.9950)
コード例 #7
0
ファイル: test_rot.py プロジェクト: WSID/crank-system
 def test_vec2_rot (self):
     a = CrankBase.VecFloat2.init (0.9950, 0.0998)
     b = CrankShape.rot_vec2_rot (a, 0.5)
     self.assertFloat (b.x, 0.8253)
     self.assertFloat (b.y, 0.5646)