Пример #1
0
    def test_eigen(self):
        #TODO looks like bug in eigen - (1, 0) should be eigenvector too
        #~ S = Scale(1, 2)
        #~ E_S = Eigen(S)
        #~ print E_S.vectors, E_S.values
        #~ print Affine(S)
        #~ for i in E_S.vectors:
        #~ print i, i*S, Point(1, 0) * S

        B = Affine(-2, 2, 2, 1, 0, 0)
        G1 = Eigen(B)
        G2 = Eigen([[-2, 2], [2, 1]])

        self.assertAlmostEqual(min(G1.values), min(G2.values))
        self.assertAlmostEqual(max(G1.values), max(G2.values))

        if Point.are_near(G1.vectors[0] * G1.values[0], G1.vectors[0] * B):
            self.assertTrue(
                Point.are_near(G1.vectors[1] * G1.values[1],
                               G1.vectors[1] * B))
        else:
            self.assertTrue(
                Point.are_near(G1.vectors[1] * G1.values[0],
                               G1.vectors[1] * B))
            self.assertTrue(
                Point.are_near(G1.vectors[0] * G1.values[1],
                               G1.vectors[0] * B))
Пример #2
0
 def test_eigen(self):
     #TODO looks like bug in eigen - (1, 0) should be eigenvector too
     #~ S = Scale(1, 2)
     #~ E_S = Eigen(S)
     #~ print E_S.vectors, E_S.values
     #~ print Affine(S)
     #~ for i in E_S.vectors:
         #~ print i, i*S, Point(1, 0) * S
     
     B = Affine(-2, 2, 2, 1, 0, 0)
     G1 = Eigen(B)
     G2 = Eigen( [[-2, 2], [2, 1]] )
     
     self.assertAlmostEqual(min(G1.values), min(G2.values))
     self.assertAlmostEqual(max(G1.values), max(G2.values))
     
     if Point.are_near( G1.vectors[0]*G1.values[0], G1.vectors[0]*B ):
         self.assertTrue( Point.are_near( G1.vectors[1]*G1.values[1], G1.vectors[1]*B ) )
     else:
         self.assertTrue( Point.are_near( G1.vectors[1]*G1.values[0], G1.vectors[1]*B ) )
         self.assertTrue( Point.are_near( G1.vectors[0]*G1.values[1], G1.vectors[0]*B ) )
Пример #3
0
    def test_rotate(self):
        R = Rotate()
        S = Rotate(pi/3)
        T = Rotate(Point( 1, 1 ))
        U = Rotate( -1, 1 )

        self.assertTrue(S.vector(), Point(cos(pi/3), sin(pi/3)) )
        self.assertEqual( Point(T[0], T[1]), T.vector() )
        self.assertTrue( Affine.are_near( Rotate.from_degrees(60), S ) )
        self.assertEqual(R, Rotate.identity())
        self.assertTrue( Point.are_near(  ( S * T ).vector(),
        Point( cos( pi/3 + pi/4 ), sin( pi/3 + pi/4 ) ) ) )

        self.affine( Affine(R), Affine(S))
        self.affine( Affine(S), Affine(T))
        self.affine( Affine(T), Affine(U))
        self.affine( Affine(U), Affine(R))
Пример #4
0
    def test_rotate(self):
        R = Rotate()
        S = Rotate(pi / 3)
        T = Rotate(Point(1, 1))
        U = Rotate(-1, 1)

        self.assertTrue(S.vector(), Point(cos(pi / 3), sin(pi / 3)))
        self.assertEqual(Point(T[0], T[1]), T.vector())
        self.assertTrue(Affine.are_near(Rotate.from_degrees(60), S))
        self.assertEqual(R, Rotate.identity())
        self.assertTrue(
            Point.are_near((S * T).vector(),
                           Point(cos(pi / 3 + pi / 4), sin(pi / 3 + pi / 4))))

        self.affine(Affine(R), Affine(S))
        self.affine(Affine(S), Affine(T))
        self.affine(Affine(T), Affine(U))
        self.affine(Affine(U), Affine(R))
Пример #5
0
    def test_zoom(self):
        Z = Zoom(3)
        Y = Zoom(translate=Translate(3, 2))
        X = Zoom(sqrt(3), Translate(-1, 3))

        self.assertEqual(Zoom(Z.scale(), Translate(Y.translation())), Y * Z)

        Z.set_translation(Y.translation())
        Y.set_scale(Z.scale())
        self.assertEqual(Z, Y)

        self.assertEqual(Y.inverse().scale(), 1 / Y.scale())

        r = Rect.from_xywh(1, 1, 3, 6)
        q = Rect.from_xywh(0, -1, 1, 2)
        W = Zoom.map_rect(r, q)

        self.assertAlmostEqual(W.scale() * r.width(), q.width())
        self.assertTrue(Point.are_near(r.min() + W.translation(), q.min()))
Пример #6
0
    def test_zoom(self):
        Z = Zoom(3)
        Y = Zoom(translate=Translate(3,2))
        X = Zoom(sqrt(3), Translate(-1, 3))
        
        self.assertEqual( 
            Zoom(Z.scale(), Translate(Y.translation())),
            Y*Z )
            
        Z.set_translation(Y.translation())
        Y.set_scale(Z.scale())
        self.assertEqual(Z, Y)
        
        self.assertEqual(Y.inverse().scale(), 1/Y.scale())
        
        r = Rect.from_xywh( 1, 1, 3, 6) 
        q = Rect.from_xywh( 0, -1, 1, 2)
        W = Zoom.map_rect(r, q)

        self.assertAlmostEqual(W.scale()*r.width(), q.width())
        self.assertTrue(Point.are_near( 
            r.min()+W.translation(), 
            q.min()))
Пример #7
0
    def test_point(self):
        p = Point(3, 4)
        q = Point(8, 16)
        p_inf = Point(float('inf'), 1)
        #y axis points downwards
        p_ccw = Point(4, -3)

        self.assertAlmostEqual(p.length(), 5)
        self.assertAlmostEqual(p.ccw(), p_ccw)
        self.assertAlmostEqual(p_ccw.cw(), p)
        self.assertAlmostEqual(p[0], 3)
        self.assertAlmostEqual(p[1], 4)

        self.assertFalse(p_inf.isFinite())
        self.assertTrue(p.isFinite())
        self.assertFalse(p.isNormalized())
        self.assertTrue((p / p.length()).isNormalized())
        self.assertFalse(p.isZero())
        self.assertTrue((p * 0).isZero())

        self.assertTrue((p + p.ccw().ccw()).isZero)
        self.assertAlmostEqual((q - p).length(), 13)

        self.assertGreater(q, p)
        self.assertGreaterEqual(q, p)
        self.assertEqual(p, p)
        self.assertNotEqual(p, q)
        self.assertLess(Point(1, 1), Point(1, 2))
        self.assertLessEqual(p, p)

        self.assertTrue(
            Point.are_near(Point.polar(pi / 4, sqrt(2)), Point(1, 1)))
        self.assertAlmostEqual(sqrt(2), Point.L2(Point(1, 1)))
        self.assertAlmostEqual(2, Point.L2sq(Point(1, 1)))
        self.assertAlmostEqual(Point.middle_point(Point(), q), q / 2)
        self.assertAlmostEqual(Point.rot90(p), p.cw())
        self.assertAlmostEqual(
            Point.lerp(0.2, Point(), Point(3, 4)).length(), 1)
        self.assertAlmostEqual(Point.dot(p, p_ccw), 0)
        self.assertAlmostEqual(Point.dot(p, p_inf), float('inf'))
        self.assertAlmostEqual(Point.dot(p, q), 88)
        #TODO this might be implemented incorrectly in lib2geom!
        self.assertAlmostEqual(Point.cross(p, q), -16)

        self.assertAlmostEqual(Point.distance(p, q), 13)
        self.assertAlmostEqual(Point.distanceSq(p, p_ccw), 50)
        self.assertAlmostEqual(Point.unit_vector(p), p / 5)

        self.assertAlmostEqual(Point.L1(p), 7)
        self.assertAlmostEqual(Point.L1(p_inf), float('inf'))
        self.assertAlmostEqual(Point.LInfty(q), 16)
        self.assertAlmostEqual(Point.LInfty(p_inf), float('inf'))

        self.assertTrue(Point.is_zero(Point()))
        self.assertFalse(Point.is_zero(p))
        self.assertTrue(Point.is_unit_vector(p / 5))
        self.assertFalse(Point.is_unit_vector(q))

        self.assertAlmostEqual(Point.atan2(Point(1, 1)), pi / 4)
        self.assertAlmostEqual(Point.angle_between(p, p_ccw), -pi / 2)
        self.assertAlmostEqual(Point.abs(-p), p)
Пример #8
0
    def test_point(self):
        p = Point(3, 4)
        q = Point(8, 16)
        p_inf = Point(float('inf'), 1)
        #y axis points downwards
        p_ccw = Point(4, -3)

        self.assertAlmostEqual(p.length(), 5)
        self.assertAlmostEqual(p.ccw(), p_ccw)
        self.assertAlmostEqual(p_ccw.cw(), p)
        self.assertAlmostEqual(p[0], 3)
        self.assertAlmostEqual(p[1], 4)

        self.assertFalse(p_inf.isFinite())
        self.assertTrue(p.isFinite())
        self.assertFalse(p.isNormalized())
        self.assertTrue((p/p.length()).isNormalized())
        self.assertFalse(p.isZero())
        self.assertTrue((p*0).isZero())

        self.assertTrue( (p + p.ccw().ccw()).isZero)
        self.assertAlmostEqual(  (q-p).length(), 13)

        self.assertGreater(q, p)
        self.assertGreaterEqual(q, p)
        self.assertEqual(p, p)
        self.assertNotEqual(p, q)
        self.assertLess( Point(1, 1), Point(1, 2) )
        self.assertLessEqual(p, p)

        self.assertTrue( Point.are_near(
            Point.polar(pi/4, sqrt(2)),
            Point(1, 1) ))
        self.assertAlmostEqual(sqrt(2), Point.L2(Point(1, 1)))
        self.assertAlmostEqual(2, Point.L2sq(Point(1, 1)))
        self.assertAlmostEqual( Point.middle_point(Point(), q), q/2 )
        self.assertAlmostEqual( Point.rot90(p), p.cw() )
        self.assertAlmostEqual(
            Point.lerp(0.2, Point(), Point(3,4)).length(),
            1)
        self.assertAlmostEqual(Point.dot(p, p_ccw), 0)
        self.assertAlmostEqual(Point.dot(p, p_inf), float('inf'))
        self.assertAlmostEqual(Point.dot(p, q), 88)
        #TODO this might be implemented incorrectly in lib2geom!
        self.assertAlmostEqual(Point.cross(p, q), -16)

        self.assertAlmostEqual(Point.distance(p, q), 13)
        self.assertAlmostEqual(Point.distanceSq(p, p_ccw), 50)
        self.assertAlmostEqual(Point.unit_vector(p), p/5)

        self.assertAlmostEqual(Point.L1(p), 7)
        self.assertAlmostEqual(Point.L1(p_inf), float('inf'))
        self.assertAlmostEqual(Point.LInfty(q), 16)
        self.assertAlmostEqual(Point.LInfty(p_inf), float('inf'))

        self.assertTrue(Point.is_zero(Point()))
        self.assertFalse(Point.is_zero(p))
        self.assertTrue(Point.is_unit_vector(p/5))
        self.assertFalse(Point.is_unit_vector(q))

        self.assertAlmostEqual(Point.atan2(Point(1, 1)), pi/4)
        self.assertAlmostEqual(Point.angle_between(p, p_ccw), -pi/2)
        self.assertAlmostEqual(Point.abs(-p), p)