Beispiel #1
0
 def test_intersect_at_boundary(self):
     nodes = np.asfortranarray([[0.0, 0.5, 1.0], [0.0, -0.25, 0.0]])
     curve = self._make_one(nodes, 2)
     left, right = curve.subdivide()
     result = left.intersect(right)
     # The "right" end of ``left`` and the "left" end of ``right``.
     expected = np.asfortranarray([[1.0], [0.0]])
     self.assertEqual(result, expected)
Beispiel #2
0
    def test_intersect_at_boundary(self):
        nodes = np.asfortranarray([
            [0.0, 0.0],
            [0.5, -0.25],
            [1.0, 0.0],
        ])
        curve = self._make_one(nodes, 2)
        left, right = curve.subdivide()

        result = left.intersect(right)
        expected = np.asfortranarray([[0.5, -0.125]])
        self.assertEqual(result, expected)
Beispiel #3
0
    def _subdivide_helper(self, nodes, expected_l, expected_r):
        klass = self._get_target_class()

        curve = klass.from_nodes(nodes)
        left, right = curve.subdivide()
        self.assertIs(left.root, curve)
        self.assertIs(right.root, curve)

        self.assertIsInstance(left, klass)
        self.assertEqual(left._nodes, expected_l)
        self.assertIsInstance(right, klass)
        self.assertEqual(right._nodes, expected_r)
Beispiel #4
0
    def test_subdivide_multilevel_root(self):
        curve = self._make_one(self.ZEROS, 1)
        left, right = curve.subdivide()
        self.assertIs(left.root, curve)
        self.assertIs(right.root, curve)

        one, two = left.subdivide()
        three, four = right.subdivide()
        self.assertIs(one.root, curve)
        self.assertIs(two.root, curve)
        self.assertIs(three.root, curve)
        self.assertIs(four.root, curve)
Beispiel #5
0
 def test_subdivide(self):
     nodes = np.asfortranarray([[0.0, 4.0], [1.0, 6.0]])
     klass = self._get_target_class()
     curve = klass.from_nodes(nodes)
     # Call ``subdivide()`` and then compare.
     left, right = curve.subdivide()
     # Check the "left" sub-curve.
     self.assertEqual(left._degree, 1)
     self.assertIsInstance(left, klass)
     expected_l = np.asfortranarray([[0.0, 2.0], [1.0, 3.5]])
     self.assertEqual(left._nodes, expected_l)
     # Check the "right" sub-curve.
     self.assertIsInstance(right, klass)
     expected_r = np.asfortranarray([[2.0, 4.0], [3.5, 6.0]])
     self.assertEqual(right._nodes, expected_r)
Beispiel #6
0
    def _subdivide_points_check(self, curve, pts_exponent=5):
        # Using the exponent means that ds = 1/2**exp, which
        # can be computed without roundoff.
        num_pts = 2**pts_exponent + 1
        left, right = curve.subdivide()

        left_half = np.linspace(0.0, 0.5, num_pts)
        right_half = np.linspace(0.5, 1.0, num_pts)
        unit_interval = np.linspace(0.0, 1.0, num_pts)

        pairs = [
            (left, left_half),
            (right, right_half),
        ]
        for sub_curve, half in pairs:
            # Make sure sub_curve([0, 1]) == curve(half)
            main_vals = curve.evaluate_multi(half)
            sub_vals = sub_curve.evaluate_multi(unit_interval)
            self.assertEqual(main_vals, sub_vals)
Beispiel #7
0
    def test_againt_subdivision(self):
        import bezier

        nodes = np.asfortranarray([
            [0.0, 1.0],
            [1.0, 6.0],
            [3.0, 5.0],
        ])
        curve = bezier.Curve(nodes, 2)
        left, right = curve.subdivide()

        left_nodes, true_start, true_end = self._call_function_under_test(
            nodes, 0.0, 0.5, 0.0, 1.0, 2)
        self.assertEqual(left.nodes, left_nodes)
        self.assertEqual(true_start, left.start)
        self.assertEqual(true_end, left.end)

        right_nodes, true_start, true_end = self._call_function_under_test(
            nodes, 0.5, 1.0, 0.0, 1.0, 2)
        self.assertEqual(right.nodes, right_nodes)
        self.assertEqual(true_start, right.start)
        self.assertEqual(true_end, right.end)