예제 #1
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)