コード例 #1
0
ファイル: factory_test.py プロジェクト: sintefmath/Splipy
    def test_edge_surfaces_six_sides(self):
        # create the unit cube
        vol = Volume()
        vol.raise_order(2,2,2)
        vol.refine(3)

        edges = vol.faces()

        # edge_surface should give back the same unit cube
        vol2 = VolumeFactory.edge_surfaces(edges)

        # check discretization
        self.assertEqual(vol2.order(0), 4)
        self.assertEqual(vol2.order(1), 4)
        self.assertEqual(vol2.order(2), 4)

        self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1]
        self.assertEqual(len(vol2.knots(1)), 5)
        self.assertEqual(len(vol2.knots(2)), 5)

        # check a 5x5x5 evaluation grid
        u = np.linspace(0,1,5)
        v = np.linspace(0,1,5)
        w = np.linspace(0,1,5)
        pt  = vol( u,v,w)
        pt2 = vol2(u,v,w)
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
コード例 #2
0
ファイル: volume_factory_test.py プロジェクト: SINTEF/Splipy
    def test_edge_surfaces_six_sides(self):
        # create the unit cube
        vol = Volume()
        vol.raise_order(2,2,2)
        vol.refine(3)

        edges = vol.faces()

        # edge_surface should give back the same unit cube
        vol2 = vf.edge_surfaces(edges)

        # check discretization
        self.assertEqual(vol2.order(0), 4)
        self.assertEqual(vol2.order(1), 4)
        self.assertEqual(vol2.order(2), 4)

        self.assertEqual(len(vol2.knots(0)), 5) # [0,.25,.5,.75,1]
        self.assertEqual(len(vol2.knots(1)), 5)
        self.assertEqual(len(vol2.knots(2)), 5)

        # check a 5x5x5 evaluation grid
        u = np.linspace(0,1,5)
        v = np.linspace(0,1,5)
        w = np.linspace(0,1,5)
        pt  = vol( u,v,w)
        pt2 = vol2(u,v,w)
        self.assertAlmostEqual(np.linalg.norm(pt-pt2), 0.0)
コード例 #3
0
ファイル: volume_test.py プロジェクト: sintefmath/Splipy
    def test_controlpoint_access(self):
        v = Volume()
        v.refine(1)
        self.assertAlmostEqual(v[0,0,0, 0] ,  0)
        self.assertAlmostEqual(v[0,0,0][0] ,  0)
        self.assertAlmostEqual(v[0,1,0][0] ,  0)
        self.assertAlmostEqual(v[0,1,0][1] , .5)
        self.assertAlmostEqual(v[0,1,0, 1] , .5)
        self.assertAlmostEqual(v[0,0,2][2] ,  1)
        self.assertAlmostEqual(v[4][0]     , .5)
        self.assertAlmostEqual(v[4][1]     , .5)
        self.assertAlmostEqual(v[4][2]     ,  0)
        self.assertAlmostEqual(v[13][0]    , .5)
        self.assertAlmostEqual(v[13][1]    , .5)
        self.assertAlmostEqual(v[13][2]    , .5)
        self.assertAlmostEqual(v[14][0]    ,  1)
        self.assertAlmostEqual(v[14][1]    , .5)
        self.assertAlmostEqual(v[14][2]    , .5)

        v[0]        = [.1, .1, .1]
        v[1,1,1]    = [.6, .6, .6]
        v[1,0,0][0] = .4
        self.assertAlmostEqual(v[0,0,0][0], .1)
        self.assertAlmostEqual(v[0,0,0][1], .1)
        self.assertAlmostEqual(v[0,0,0][2], .1)
        self.assertAlmostEqual(v[13][0]   , .6)
        self.assertAlmostEqual(v[13][1]   , .6)
        self.assertAlmostEqual(v[13][2]   , .6)
        self.assertAlmostEqual(v[1][0]    , .4)
        self.assertAlmostEqual(v[1][1]    ,  0)
        self.assertAlmostEqual(v[1][2]    ,  0)

        v[:,0,0]         = 13
        v[0,1,0][:]      = 12
        # v[0,2,1]         = [9,8,7]
        # v[0,2,0]         = [9,8,7]
        v[0,2,1::-1]   = [9,8,7]
        v[1,2,1::-1,:] = [[6,5,4],[3,2,1]]
        self.assertAlmostEqual(v[1,0,0,0], 13)
        self.assertAlmostEqual(v[1,0,0,1], 13)
        self.assertAlmostEqual(v[2,0,0,2], 13)
        self.assertAlmostEqual(v[0,1,0,0], 12)
        self.assertAlmostEqual(v[0,1,0,2], 12)
        self.assertAlmostEqual(v[0,2,2,1],  1)
        self.assertAlmostEqual(v[0,2,1,0],  9)
        self.assertAlmostEqual(v[0,2,1,1],  8)
        self.assertAlmostEqual(v[0,2,0,2],  7)
        self.assertAlmostEqual(v[1,2,1,0],  6)
        self.assertAlmostEqual(v[1,2,1,1],  5)
        self.assertAlmostEqual(v[1,2,1,2],  4)
        self.assertAlmostEqual(v[1,2,0,0],  3)
        self.assertAlmostEqual(v[1,2,0,1],  2)
        self.assertAlmostEqual(v[1,2,0,2],  1)
コード例 #4
0
ファイル: volume_test.py プロジェクト: SINTEF/Splipy
    def test_controlpoint_access(self):
        v = Volume()
        v.refine(1)
        self.assertAlmostEqual(v[0, 0, 0, 0], 0)
        self.assertAlmostEqual(v[0, 0, 0][0], 0)
        self.assertAlmostEqual(v[0, 1, 0][0], 0)
        self.assertAlmostEqual(v[0, 1, 0][1], .5)
        self.assertAlmostEqual(v[0, 1, 0, 1], .5)
        self.assertAlmostEqual(v[0, 0, 2][2], 1)
        self.assertAlmostEqual(v[4][0], .5)
        self.assertAlmostEqual(v[4][1], .5)
        self.assertAlmostEqual(v[4][2], 0)
        self.assertAlmostEqual(v[13][0], .5)
        self.assertAlmostEqual(v[13][1], .5)
        self.assertAlmostEqual(v[13][2], .5)
        self.assertAlmostEqual(v[14][0], 1)
        self.assertAlmostEqual(v[14][1], .5)
        self.assertAlmostEqual(v[14][2], .5)

        v[0] = [.1, .1, .1]
        v[1, 1, 1] = [.6, .6, .6]
        v[1, 0, 0][0] = .4
        self.assertAlmostEqual(v[0, 0, 0][0], .1)
        self.assertAlmostEqual(v[0, 0, 0][1], .1)
        self.assertAlmostEqual(v[0, 0, 0][2], .1)
        self.assertAlmostEqual(v[13][0], .6)
        self.assertAlmostEqual(v[13][1], .6)
        self.assertAlmostEqual(v[13][2], .6)
        self.assertAlmostEqual(v[1][0], .4)
        self.assertAlmostEqual(v[1][1], 0)
        self.assertAlmostEqual(v[1][2], 0)

        v[:, 0, 0] = 13
        v[0, 1, 0][:] = 12
        # v[0,2,1]         = [9,8,7]
        # v[0,2,0]         = [9,8,7]
        v[0, 2, 1::-1] = [9, 8, 7]
        v[1, 2, 1::-1, :] = [[6, 5, 4], [3, 2, 1]]
        self.assertAlmostEqual(v[1, 0, 0, 0], 13)
        self.assertAlmostEqual(v[1, 0, 0, 1], 13)
        self.assertAlmostEqual(v[2, 0, 0, 2], 13)
        self.assertAlmostEqual(v[0, 1, 0, 0], 12)
        self.assertAlmostEqual(v[0, 1, 0, 2], 12)
        self.assertAlmostEqual(v[0, 2, 2, 1], 1)
        self.assertAlmostEqual(v[0, 2, 1, 0], 9)
        self.assertAlmostEqual(v[0, 2, 1, 1], 8)
        self.assertAlmostEqual(v[0, 2, 0, 2], 7)
        self.assertAlmostEqual(v[1, 2, 1, 0], 6)
        self.assertAlmostEqual(v[1, 2, 1, 1], 5)
        self.assertAlmostEqual(v[1, 2, 1, 2], 4)
        self.assertAlmostEqual(v[1, 2, 0, 0], 3)
        self.assertAlmostEqual(v[1, 2, 0, 1], 2)
        self.assertAlmostEqual(v[1, 2, 0, 2], 1)
コード例 #5
0
ファイル: volume_test.py プロジェクト: SINTEF/Splipy
    def test_operators(self):
        v = Volume()
        v.raise_order(1, 1, 2)
        v.refine(3, 2, 1)

        # test translation operator
        v2 = v + [1, 0, 0]
        v3 = [1, 0, 0] + v
        v += [1, 0, 0]
        self.assertTrue(np.allclose(v2.controlpoints, v3.controlpoints))
        self.assertTrue(np.allclose(v.controlpoints, v3.controlpoints))

        # test scaling operator
        v2 = v * 3
        v3 = 3 * v
        v *= 3
        self.assertTrue(np.allclose(v2.controlpoints, v3.controlpoints))
        self.assertTrue(np.allclose(v.controlpoints, v3.controlpoints))
コード例 #6
0
ファイル: volume_test.py プロジェクト: SINTEF/Splipy
    def test_make_identical(self):
        basis1 = BSplineBasis(4, [-1, -1, 0, 0, 1, 1, 2, 2], periodic=1)
        basis2 = BSplineBasis(3, [-1, 0, 0, 1, 1, 2], periodic=0)
        basis3 = BSplineBasis(2)
        vol1 = Volume()
        vol2 = Volume(basis1, basis2, basis3)
        vol1.refine(1)
        Volume.make_splines_identical(vol1, vol2)

        for v in (vol1, vol2):
            self.assertEqual(v.periodic(0), False)
            self.assertEqual(v.periodic(1), False)
            self.assertEqual(v.periodic(2), False)

            self.assertEqual(v.order(), (4, 3, 2))
            self.assertAlmostEqual(len(v.knots(0, True)), 11)
            self.assertAlmostEqual(len(v.knots(1, True)), 8)
            self.assertAlmostEqual(len(v.knots(2, True)), 5)
コード例 #7
0
ファイル: volume_test.py プロジェクト: sintefmath/Splipy
    def test_operators(self):
        v = Volume()
        v.raise_order(1,1,2)
        v.refine(3,2,1)

        # test translation operator
        v2 = v + [1,0,0]
        v3 = [1,0,0] + v
        v += [1,0,0]
        self.assertTrue(np.allclose(v2.controlpoints, v3.controlpoints))
        self.assertTrue(np.allclose(v.controlpoints,  v3.controlpoints))

        # test scaling operator
        v2 = v * 3
        v3 = 3 * v
        v *= 3
        self.assertTrue(np.allclose(v2.controlpoints, v3.controlpoints))
        self.assertTrue(np.allclose(v.controlpoints,  v3.controlpoints))
コード例 #8
0
ファイル: volume_test.py プロジェクト: sintefmath/Splipy
    def test_make_identical(self):
        basis1 = BSplineBasis(4, [-1,-1,0,0,1,1,2,2], periodic=1)
        basis2 = BSplineBasis(3, [-1,0,0,1,1,2],      periodic=0)
        basis3 = BSplineBasis(2)
        vol1 = Volume()
        vol2 = Volume(basis1, basis2, basis3)
        vol1.refine(1)
        Volume.make_splines_identical(vol1,vol2)

        for v in (vol1, vol2):
            self.assertEqual(v.periodic(0), False)
            self.assertEqual(v.periodic(1), False)
            self.assertEqual(v.periodic(2), False)

            self.assertEqual(v.order(), (4,3,2))
            self.assertAlmostEqual(len(v.knots(0, True)), 11)
            self.assertAlmostEqual(len(v.knots(1, True)), 8)
            self.assertAlmostEqual(len(v.knots(2, True)), 5)
コード例 #9
0
ファイル: volume_test.py プロジェクト: SINTEF/Splipy
    def test_bounding_box(self):
        vol = Volume()
        bb = vol.bounding_box()
        self.assertAlmostEqual(bb[0][0], 0)
        self.assertAlmostEqual(bb[0][1], 1)
        self.assertAlmostEqual(bb[1][0], 0)
        self.assertAlmostEqual(bb[1][1], 1)
        self.assertAlmostEqual(bb[2][0], 0)
        self.assertAlmostEqual(bb[2][1], 1)

        vol.refine(2)
        vol.rotate(pi / 4, [1, 0, 0])
        vol += (1, 0, 1)
        bb = vol.bounding_box()
        self.assertAlmostEqual(bb[0][0], 1)
        self.assertAlmostEqual(bb[0][1], 2)
        self.assertAlmostEqual(bb[1][0], -sqrt(2) / 2)
        self.assertAlmostEqual(bb[1][1], sqrt(2) / 2)
        self.assertAlmostEqual(bb[2][0], 1)
        self.assertAlmostEqual(bb[2][1], 1 + sqrt(2))
コード例 #10
0
ファイル: volume_test.py プロジェクト: sintefmath/Splipy
    def test_bounding_box(self):
        vol = Volume()
        bb = vol.bounding_box()
        self.assertAlmostEqual(bb[0][0], 0 )
        self.assertAlmostEqual(bb[0][1], 1 )
        self.assertAlmostEqual(bb[1][0], 0 )
        self.assertAlmostEqual(bb[1][1], 1 )
        self.assertAlmostEqual(bb[2][0], 0 )
        self.assertAlmostEqual(bb[2][1], 1 )

        vol.refine(2)
        vol.rotate(pi/4, [1,0,0])
        vol += (1,0,1)
        bb = vol.bounding_box()
        self.assertAlmostEqual(bb[0][0], 1 )
        self.assertAlmostEqual(bb[0][1], 2 )
        self.assertAlmostEqual(bb[1][0], -sqrt(2)/2 )
        self.assertAlmostEqual(bb[1][1],  sqrt(2)/2 )
        self.assertAlmostEqual(bb[2][0], 1 )
        self.assertAlmostEqual(bb[2][1], 1+sqrt(2) )