Example #1
0
    def test_edges(self):
        (umin, umax, vmin, vmax) = Surface().edges()
        # check controlpoints
        self.assertAlmostEqual(umin[0, 0], 0)
        self.assertAlmostEqual(umin[0, 1], 0)
        self.assertAlmostEqual(umin[1, 0], 0)
        self.assertAlmostEqual(umin[1, 1], 1)

        self.assertAlmostEqual(umax[0, 0], 1)
        self.assertAlmostEqual(umax[0, 1], 0)
        self.assertAlmostEqual(umax[1, 0], 1)
        self.assertAlmostEqual(umax[1, 1], 1)

        self.assertAlmostEqual(vmin[0, 0], 0)
        self.assertAlmostEqual(vmin[0, 1], 0)
        self.assertAlmostEqual(vmin[1, 0], 1)
        self.assertAlmostEqual(vmin[1, 1], 0)

        # check a slightly more general surface
        cp = [[0, 0], [.5, -.5], [1, 0], [-.6, 1], [1, 1], [2, 1.4], [0, 2],
              [.8, 3], [2, 2.4]]
        surf = Surface(BSplineBasis(3), BSplineBasis(3), cp)
        edg = surf.edges()
        u = np.linspace(0, 1, 9)
        v = np.linspace(0, 1, 9)

        pt = surf(0, v)
        pt2 = edg[0](v)
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)

        pt = surf(1, v)
        pt2 = edg[1](v)
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)

        pt = surf(u, 0).reshape(9, 2)
        pt2 = edg[2](u)
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)

        pt = surf(u, 1).reshape(9, 2)
        pt2 = edg[3](u)
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)