Пример #1
0
    def test_from_quadratic_not_elevated(self):
        from bezier import _curve_helpers

        nodes = np.asfortranarray([[0.0, 1.0, 2.0], [0.0, 1.5, 0.0]])
        result = self._call_function_under_test(nodes)
        expected = np.asfortranarray([[0.0, 2.0], [0.5, 0.5]])
        self.assertEqual(result, expected)
        re_elevated = _curve_helpers.elevate_nodes(result)
        self.assertTrue(np.any(nodes != re_elevated))
Пример #2
0
    def elevate(self):
        r"""Return a degree-elevated version of the current curve.

        Does this by converting the current nodes :math:`v_0, \ldots, v_n`
        to new nodes :math:`w_0, \ldots, w_{n + 1}` where

        .. math::

           \begin{align*}
           w_0 &= v_0 \\
           w_j &= \frac{j}{n + 1} v_{j - 1} + \frac{n + 1 - j}{n + 1} v_j \\
           w_{n + 1} &= v_n
           \end{align*}

        .. image:: ../images/curve_elevate.png
           :align: center

        .. testsetup:: curve-elevate

           import numpy as np
           import bezier

        .. doctest:: curve-elevate
           :options: +NORMALIZE_WHITESPACE

           >>> nodes = np.asfortranarray([
           ...     [0.0, 0.0],
           ...     [1.5, 1.5],
           ...     [3.0, 0.0],
           ... ])
           >>> curve = bezier.Curve(nodes, degree=2)
           >>> elevated = curve.elevate()
           >>> elevated
           <Curve (degree=3, dimension=2)>
           >>> elevated.nodes
           array([[ 0., 0.],
                  [ 1., 1.],
                  [ 2., 1.],
                  [ 3., 0.]])

        .. testcleanup:: curve-elevate

           import make_images
           make_images.curve_elevate(curve, elevated)

        Returns:
            Curve: The degree-elevated curve.
        """
        new_nodes = _curve_helpers.elevate_nodes(self._nodes, self._degree,
                                                 self._dimension)
        root = None if self._root is self else self._root
        return Curve(new_nodes,
                     self._degree + 1,
                     start=self._start,
                     end=self._end,
                     root=root,
                     _copy=False)
Пример #3
0
    def _actually_inverse_helper(self, degree):
        from bezier import _curve_helpers
        from bezier import _helpers

        nodes = np.eye(degree + 2, order="F")
        reduction_mat = self._call_function_under_test(nodes)
        id_mat = np.eye(degree + 1, order="F")
        elevation_mat = _curve_helpers.elevate_nodes(id_mat)
        result = _helpers.matrix_product(elevation_mat, reduction_mat)
        return result, id_mat
Пример #4
0
    def _call_function_under_test(nodes, degree, dimension):
        from bezier import _curve_helpers

        return _curve_helpers.elevate_nodes(nodes, degree, dimension)