Esempio n. 1
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()))
Esempio n. 2
0
    def test_rect(self):
        
        P = Rect(0.298, 2, 4, 5)

        self.interval_basic(P[0], P[1])
        G = Rect(sqrt(2), sqrt(2), sqrt(3), sqrt(3))
        H = Rect.from_xywh(3.43232, 9.23214, 21.523, -0.31232)
        
        self.rect_basic(P, G)
        self.rect_basic(G, H)
        
        lst = [Point(randint(-100, 100), randint(-100, 100)) for i in range(10)]
   
        R = Rect.from_list(lst)
        
        for p in lst:
            self.assertTrue(R.contains(p))
            
        self.assertAlmostEqual(min(lst).y, R.min().y)
        self.assertAlmostEqual(max(lst).y, R.max().y)
Esempio n. 3
0
    def test_optRect(self):
        
        P = OptRect(0.298, 2, 4, 5)
        self.interval_basic(P.Rect[0], P.Rect[1])
        
        
        G = Rect(sqrt(2), sqrt(2), sqrt(3), sqrt(3))
        H = OptRect.from_rect(G)

        self.rect_basic(P.Rect, G)
        
        lst = [Point(randint(-100, 100), randint(-100, 100)) for i in range(10)]

        R = OptRect.from_list(lst)

        for p in lst:
            self.assertTrue(R.Rect.contains(p))
            
        self.assertAlmostEqual(min(lst).y, R.Rect.min().y)
        self.assertAlmostEqual(max(lst).y, R.Rect.max().y)
        
        Q = OptRect()
        self.assertFalse(Q)
        self.assertTrue(P)

        self.assertTrue(Q.is_empty())
        self.assertFalse(P.is_empty())

        self.assertTrue(P.contains_rect( P ))
        self.assertTrue(P.contains_rect(Q))
        self.assertFalse(Q.contains_rect(P))
        self.assertFalse(P.intersects(Q))
        self.assertTrue(P.contains_rect(P.Rect))
        self.assertTrue(P.contains(P.Rect.midpoint())) 
        
        self.assertEqual(P, OptRect.from_rect(P))
        
        P.union_with(G)
        P.union_with(H)
        self.assertTrue(P.contains_rect(H))
        
        P.intersect_with(G)
        self.assertEqual(P, G)
        
        self.assertEqual( P|H, G )
        self.assertEqual( (P|R).Rect.min().x , min( P.Rect.min().x, R.Rect.min().x ))
        
        self.assertFalse(P & Q)
        self.assertEqual(P, P&P)
        
        self.assertEqual( P & (R | H), (P & R) | (P & H)  )
Esempio n. 4
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()))
Esempio n. 5
0
    def test_translate(self):
        T = Translate()
        U = Translate(Point(2, 4))
        V = Translate(1, -9)

        self.assertTrue(Affine(T).is_translation())
        self.assertTrue(Affine(U).is_nonzero_translation())

        self.assertEqual( (U*V).vector(), U.vector()+V.vector() )
        self.assertEqual( U.inverse().vector(), -U.vector() )
        self.assertEqual(T, Translate.identity())
        self.assertEqual( U.vector(), Point(U[0], U[1]) )

        self.affine(Affine(V), Affine(U))
        self.affine(Affine(U), Affine(V))

        r = Rect.from_points( Point(0, 2), Point(4, 8) )

        self.assertEqual( ( r*(U*V) ).min(), r.min()+U.vector()+V.vector())
Esempio n. 6
0
    def test_translate(self):
        T = Translate()
        U = Translate(Point(2, 4))
        V = Translate(1, -9)

        self.assertTrue(Affine(T).is_translation())
        self.assertTrue(Affine(U).is_nonzero_translation())

        self.assertEqual((U * V).vector(), U.vector() + V.vector())
        self.assertEqual(U.inverse().vector(), -U.vector())
        self.assertEqual(T, Translate.identity())
        self.assertEqual(U.vector(), Point(U[0], U[1]))

        self.affine(Affine(V), Affine(U))
        self.affine(Affine(U), Affine(V))

        r = Rect.from_points(Point(0, 2), Point(4, 8))

        self.assertEqual((r * (U * V)).min(),
                         r.min() + U.vector() + V.vector())
Esempio n. 7
0
    def test_scale(self):
        S = Scale()
        T = Scale( Point (3, 8) )
        U = Scale( -3, 1)
        V = Scale(sqrt(2))

        self.assertTrue( Affine(T).is_scale() )
        self.assertTrue( Affine(T).is_nonzero_scale() )
        self.assertTrue( Affine(V).is_nonzero_uniform_scale())

        self.assertEqual( (T*V).vector(), T.vector()*sqrt(2) )
        self.assertEqual( (T*U)[0], T[0]*U[0] )
        self.assertAlmostEqual( 1/U.inverse()[1], U[1] )

        r = Rect.from_points( Point(0, 2), Point(4, 8) )
        self.assertAlmostEqual((r*V).area(), 2*r.area())
        self.assertFalse(Affine(U).preserves_area())
        self.assertTrue(Affine(V).preserves_angles())
        
        self.affine(Affine(T), Affine(U))
        self.affine(Affine(U), Affine(V))
        self.affine(Affine(V), Affine(T))
Esempio n. 8
0
    def test_scale(self):
        S = Scale()
        T = Scale(Point(3, 8))
        U = Scale(-3, 1)
        V = Scale(sqrt(2))

        self.assertTrue(Affine(T).is_scale())
        self.assertTrue(Affine(T).is_nonzero_scale())
        self.assertTrue(Affine(V).is_nonzero_uniform_scale())

        self.assertEqual((T * V).vector(), T.vector() * sqrt(2))
        self.assertEqual((T * U)[0], T[0] * U[0])
        self.assertAlmostEqual(1 / U.inverse()[1], U[1])

        r = Rect.from_points(Point(0, 2), Point(4, 8))
        self.assertAlmostEqual((r * V).area(), 2 * r.area())
        self.assertFalse(Affine(U).preserves_area())
        self.assertTrue(Affine(V).preserves_angles())

        self.affine(Affine(T), Affine(U))
        self.affine(Affine(U), Affine(V))
        self.affine(Affine(V), Affine(T))
Esempio n. 9
0
    def rect_basic(self, P, Q):
        pmin = P.min()
        pmax = P.max()
        #for simplicity
        self.assertTrue(pmin.x > 0)
        self.assertTrue(pmin.y > 0)
        
        self.assertAlmostEqual(pmin.x, P[0].min())
        self.assertAlmostEqual(pmax.y, P[1].max())
        self.assertEqual(pmin, P.corner(0))
        
        self.assertEqual(pmin, Point(P.left(), P.top()))
        self.assertEqual(pmax, Point(P.right(), P.bottom()))
        
        self.assertAlmostEqual( P.width(), P[0].extent() )
        self.assertAlmostEqual( P.height(), P[1].extent() )
        
        self.assertAlmostEqual( P.aspect_ratio(), P.width()/P.height() )
        self.assertEqual( P.dimensions(), Point( P.width(), P.height() ) )
        self.assertEqual( P.midpoint(), (P.min() + P.max())/2 )
        self.assertAlmostEqual(P.area(), P.width()*P.height())
        #TODO export EPSILON from 2geom
        if P.area() > 1e-7:
            self.assertFalse(P.has_zero_area())
            self.assertTrue(P.has_zero_area(P.area()))
        else:
            self.assertTrue(P.has_zero_area())
        self.assertAlmostEqual(P.max_extent(), max(P.width(), P.height()))
        self.assertGreaterEqual(P.max_extent(), P.min_extent())
        
        qmin = Q.min()
        qmax = Q.max()
        
        pdiag = (pmax-pmin).length()
        
        Q.set_min(P.midpoint())
        Q.set_max(P.midpoint())
        self.assertTrue(Q.has_zero_area())
        
        #print P,Q
        Q.expand_by(P.min_extent()/3.0)
         
        #print P, Q
        
        self.assertTrue(P.contains_rect(Q))
        self.assertTrue(P.intersects(Q))
        self.assertTrue(Q.intersects(P))
        self.assertFalse(Q.contains_rect(P))
        
        self.assertTrue(P.interior_contains_rect(Q))
        self.assertFalse(P.interior_contains_rect(P))
        self.assertTrue(P.interior_intersects(Q))
        self.assertTrue(P.interior_intersects(P))
        
        self.assertTrue(P.contains(P.midpoint()))
        self.assertFalse(P.contains(P.midpoint()*3))
        
        P.union_with(Q)
        
        self.assertEqual( P.min(), pmin )
        
        Q.set_left(qmin.x)
        Q.set_top(qmin.y)
        Q.set_right(qmax.x)
        Q.set_bottom(qmax.y)
        
        self.assertEqual(Q.min(), qmin)
        self.assertEqual(Q.max(), qmax)
        
        Q.expand_to( Point() )
        self.assertEqual(Point(), Q.min())
        Q.expand_by(qmax)
        self.assertEqual(qmax, -Q.min())
        
        Q.expand_by(-qmax.x, -qmax.y)
        self.assertEqual(Q.max(), qmax)
        
        self.assertEqual( (P+Q.min()).max(), P.max() + Q.min() )
        
        self.assertEqual( (P-Q.max()).min(), P.min() - Q.max() )
        
        self.assertEqual( P|P, P )
        
        self.assertFalse( P != P )

        Q.set_left(qmin.x)
        Q.set_top(qmin.y)
        Q.set_right(qmax.x)
        Q.set_bottom(qmax.y)
        
        self.assertAlmostEqual(Rect.distance(Point(), P), P.min().length())
        self.assertAlmostEqual(Rect.distanceSq(Q.min(), P), Rect.distance(Q.min(), P)**2 )
        
        self.assertEqual(P.round_outwards()[0], P[0].round_outwards())
        if P.round_inwards():
            self.assertEqual(P.round_inwards().Rect[1], P[1].round_inwards().Interval)