Example #1
0
class TestBezier(unittest.TestCase):

    def setUp(self):
        self.b0 = Bezier([(1, 1), (2, 3), (4, 3), (3, 1)])
        self.b1 = Bezier([(-1,1), (3,3), (4,-1), (2,-1)])

    def test_bezier(self):
        test = np.array([self.b0.point(i/10.0) for i in range(11)])
        ref = np.array([(1.000, 1.00),
                        (1.326, 1.54),
                        (1.688, 1.96),
                        (2.062, 2.26),
                        (2.424, 2.44),
                        (2.750, 2.50),
                        (3.016, 2.44),
                        (3.198, 2.26),
                        (3.272, 1.96),
                        (3.214, 1.54),
                        (3.000, 1.00)])
        self.assertTrue(np.allclose(test, ref))

    def test_eq(self):
        self.assertEqual(self.b0, copy(self.b0))

    def test_elevate(self):
        test1 = self.b1.elevate()
        ref1 = Bezier([(-1.0, 1.0), (2.0, 2.5), (3.5, 1.0), (3.5, -1.0), (2.0, -1.0)])

        test2 = self.b1.elevate(degree=2)
        ref2 = Bezier([(-1.0, 1.0), (1.4, 2.2), (2.9, 1.6), (3.5, 0.2), (3.2, -1.0), (2.0, -1.0)])

        self.assertEqual(test1, ref1)
        self.assertEqual(test2, ref2)

    def test_split(self):
        ref_l = Bezier([(-1.0, 1.0), (1.0, 2.0), (2.25, 1.5), (2.75, 0.75)])
        ref_r = Bezier([(2.75, 0.75), (3.25, 0.0), (3.0, -1.0), (2.0, -1.0)])

        test_l, test_r = self.b1.split(t=0.5)

        self.assertEqual(test_l, ref_l)
        self.assertEqual(test_r, ref_r)

    def test_curvature(self):
        ref = np.array([
            0.134164,
            0.219124,
            0.340136,
            0.471343,
            0.566666,
            0.625815,
            0.713340,
            0.904176,
            1.155625,
            1.095216,
            0.670820])
        test = np.array([self.b1.curvature(t=t) for t in np.linspace(0.0, 1.0, num=11)])

        self.assertTrue(np.allclose(test, ref))

    def test_derivated(self):
        b = Bezier([(-4.0, 0.00), (4.0, 0.00), (-2.0, 0.00), (2.0, 0.00)])
        d = b.derivative

        print(d.point(t=0.08))