Пример #1
0
    def test_reverse(self):
        # identity mapping, control points generated from knot vector
        basis1 = BSplineBasis(4, [2, 2, 2, 2, 3, 6, 12, 12, 12, 12])
        basis2 = BSplineBasis(3, [-3, -3, -3, 20, 30, 33, 33, 33])
        basis3 = BSplineBasis(5, [0, 0, 0, 0, 0, 8, 8, 8, 8, 8])
        vol = Volume(basis1, basis2, basis3)

        u = np.linspace(2, 12, 5)
        v = np.linspace(-3, 33, 5)
        w = np.linspace(0, 8, 5)

        pt = vol(u, v, w)

        vol.reverse('v')
        pt2 = vol(u, v[::-1], w)
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)
        self.assertAlmostEqual(vol.start('v'), -3)
        self.assertAlmostEqual(vol.end('v'), 33)

        vol.reverse(2)
        pt2 = vol(u, v[::-1], w[::-1])
        self.assertAlmostEqual(np.linalg.norm(pt - pt2), 0.0)
        self.assertAlmostEqual(vol.start('w'), 0)
        self.assertAlmostEqual(vol.end('w'), 8)
Пример #2
0
    def test_reverse(self):
        # identity mapping, control points generated from knot vector
        basis1 = BSplineBasis(4, [2,2,2,2,3,6,12,12,12,12])
        basis2 = BSplineBasis(3, [-3,-3,-3,20,30,33,33,33])
        basis3 = BSplineBasis(5, [0,0,0,0,0,8,8,8,8,8])
        vol = Volume(basis1, basis2, basis3)
        
        u = np.linspace( 2,12,5)
        v = np.linspace(-3,33,5)
        w = np.linspace( 0, 8,5)

        pt = vol(u,v,w)

        vol.reverse('v')
        pt2 = vol(u,v[::-1],w)
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
        self.assertAlmostEqual(vol.start('v'),  -3)
        self.assertAlmostEqual(vol.end('v'),    33)

        vol.reverse(2)
        pt2 = vol(u,v[::-1],w[::-1])
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
        self.assertAlmostEqual(vol.start('w'),   0)
        self.assertAlmostEqual(vol.end('w'),     8)
Пример #3
0
    def test_reparam(self):
        # identity mapping, control points generated from knot vector
        basis1 = BSplineBasis(4, [2, 2, 2, 2, 3, 6, 7, 7, 7, 7])
        basis2 = BSplineBasis(3, [-3, -3, -3, 20, 30, 31, 31, 31])
        basis3 = BSplineBasis(5, [0, 0, 0, 0, 0, 8, 8, 8, 8, 8])
        vol = Volume(basis1, basis2, basis3)

        self.assertAlmostEqual(vol.start(0), 2)
        self.assertAlmostEqual(vol.end(0), 7)
        self.assertAlmostEqual(vol.start(1), -3)
        self.assertAlmostEqual(vol.end(1), 31)
        self.assertAlmostEqual(vol.start(2), 0)
        self.assertAlmostEqual(vol.end(2), 8)

        vol.reparam((4, 10), (0, 9), (2, 3))
        self.assertAlmostEqual(vol.start(0), 4)
        self.assertAlmostEqual(vol.end(0), 10)
        self.assertAlmostEqual(vol.start(1), 0)
        self.assertAlmostEqual(vol.end(1), 9)
        self.assertAlmostEqual(vol.start(2), 2)
        self.assertAlmostEqual(vol.end(2), 3)

        vol.reparam((5, 11), direction=0)
        self.assertAlmostEqual(vol.start(0), 5)
        self.assertAlmostEqual(vol.end(0), 11)
        self.assertAlmostEqual(vol.start(1), 0)
        self.assertAlmostEqual(vol.end(1), 9)
        self.assertAlmostEqual(vol.start(2), 2)
        self.assertAlmostEqual(vol.end(2), 3)

        vol.reparam((5, 11), direction=1)
        self.assertAlmostEqual(vol.start(0), 5)
        self.assertAlmostEqual(vol.end(0), 11)
        self.assertAlmostEqual(vol.start(1), 5)
        self.assertAlmostEqual(vol.end(1), 11)
        self.assertAlmostEqual(vol.start(2), 2)
        self.assertAlmostEqual(vol.end(2), 3)

        vol.reparam((5, 11), direction=2)
        self.assertAlmostEqual(vol.start(0), 5)
        self.assertAlmostEqual(vol.end(0), 11)
        self.assertAlmostEqual(vol.start(1), 5)
        self.assertAlmostEqual(vol.end(1), 11)
        self.assertAlmostEqual(vol.start(2), 5)
        self.assertAlmostEqual(vol.end(2), 11)

        vol.reparam((-9, 9))
        self.assertAlmostEqual(vol.start(0), -9)
        self.assertAlmostEqual(vol.end(0), 9)
        self.assertAlmostEqual(vol.start(1), 0)
        self.assertAlmostEqual(vol.end(1), 1)
        self.assertAlmostEqual(vol.start(2), 0)
        self.assertAlmostEqual(vol.end(2), 1)

        vol.reparam()
        self.assertAlmostEqual(vol.start(0), 0)
        self.assertAlmostEqual(vol.end(0), 1)
        self.assertAlmostEqual(vol.start(1), 0)
        self.assertAlmostEqual(vol.end(1), 1)
        self.assertAlmostEqual(vol.start(2), 0)
        self.assertAlmostEqual(vol.end(2), 1)

        vol.reparam((4, 10), (0, 9), (2, 7))
        vol.reparam(direction=1)
        self.assertAlmostEqual(vol.start(0), 4)
        self.assertAlmostEqual(vol.end(0), 10)
        self.assertAlmostEqual(vol.start(1), 0)
        self.assertAlmostEqual(vol.end(1), 1)
        self.assertAlmostEqual(vol.start(2), 2)
        self.assertAlmostEqual(vol.end(2), 7)
Пример #4
0
    def test_reparam(self):
        # identity mapping, control points generated from knot vector
        basis1 = BSplineBasis(4, [2,2,2,2,3,6,7,7,7,7])
        basis2 = BSplineBasis(3, [-3,-3,-3,20,30,31,31,31])
        basis3 = BSplineBasis(5, [0,0,0,0,0,8,8,8,8,8])
        vol = Volume(basis1, basis2, basis3)

        self.assertAlmostEqual(vol.start(0),  2)
        self.assertAlmostEqual(vol.end(0),    7)
        self.assertAlmostEqual(vol.start(1), -3)
        self.assertAlmostEqual(vol.end(1),   31)
        self.assertAlmostEqual(vol.start(2),  0)
        self.assertAlmostEqual(vol.end(2),    8)

        vol.reparam((4,10), (0,9), (2,3))
        self.assertAlmostEqual(vol.start(0),  4)
        self.assertAlmostEqual(vol.end(0),   10)
        self.assertAlmostEqual(vol.start(1),  0)
        self.assertAlmostEqual(vol.end(1),    9)
        self.assertAlmostEqual(vol.start(2),  2)
        self.assertAlmostEqual(vol.end(2),    3)

        vol.reparam((5,11), direction=0)
        self.assertAlmostEqual(vol.start(0),  5)
        self.assertAlmostEqual(vol.end(0),   11)
        self.assertAlmostEqual(vol.start(1),  0)
        self.assertAlmostEqual(vol.end(1),    9)
        self.assertAlmostEqual(vol.start(2),  2)
        self.assertAlmostEqual(vol.end(2),    3)

        vol.reparam((5,11), direction=1)
        self.assertAlmostEqual(vol.start(0),  5)
        self.assertAlmostEqual(vol.end(0),   11)
        self.assertAlmostEqual(vol.start(1),  5)
        self.assertAlmostEqual(vol.end(1),   11)
        self.assertAlmostEqual(vol.start(2),  2)
        self.assertAlmostEqual(vol.end(2),    3)

        vol.reparam((5,11), direction=2)
        self.assertAlmostEqual(vol.start(0),  5)
        self.assertAlmostEqual(vol.end(0),   11)
        self.assertAlmostEqual(vol.start(1),  5)
        self.assertAlmostEqual(vol.end(1),   11)
        self.assertAlmostEqual(vol.start(2),  5)
        self.assertAlmostEqual(vol.end(2),   11)

        vol.reparam((-9,9))
        self.assertAlmostEqual(vol.start(0), -9)
        self.assertAlmostEqual(vol.end(0),    9)
        self.assertAlmostEqual(vol.start(1),  0)
        self.assertAlmostEqual(vol.end(1),    1)
        self.assertAlmostEqual(vol.start(2),  0)
        self.assertAlmostEqual(vol.end(2),    1)

        vol.reparam()
        self.assertAlmostEqual(vol.start(0),  0)
        self.assertAlmostEqual(vol.end(0),    1)
        self.assertAlmostEqual(vol.start(1),  0)
        self.assertAlmostEqual(vol.end(1),    1)
        self.assertAlmostEqual(vol.start(2),  0)
        self.assertAlmostEqual(vol.end(2),    1)

        vol.reparam((4,10), (0,9), (2,7))
        vol.reparam(direction=1)
        self.assertAlmostEqual(vol.start(0),  4)
        self.assertAlmostEqual(vol.end(0),   10)
        self.assertAlmostEqual(vol.start(1),  0)
        self.assertAlmostEqual(vol.end(1),    1)
        self.assertAlmostEqual(vol.start(2),  2)
        self.assertAlmostEqual(vol.end(2),    7)