示例#1
0
    def testBoundingSphereFromPoints(self):
        sphere = BoundingSphere()
        self.assertEqual(len(sphere.center), 0)
        self.assertEqual(sphere.radius, 0.0)

        self.assertEqual(sphere.minPointX[0], float('inf'))
        self.assertEqual(sphere.minPointY[1], float('inf'))
        self.assertEqual(sphere.minPointZ[2], float('inf'))

        self.assertEqual(sphere.maxPointX[0], float('-inf'))
        self.assertEqual(sphere.maxPointY[1], float('-inf'))
        self.assertEqual(sphere.maxPointZ[2], float('-inf'))

        points = [[1.1, 3.2, 4.9], [3.1, 1.0, 21.4], [9.1, 3.2, 2.0],
                  [2.0, 4.0, 9.5]]
        sphere.fromPoints(points)

        self.assertNotEqual(sphere.minPointX[0], float('inf'))
        self.assertNotEqual(sphere.minPointY[1], float('inf'))
        self.assertNotEqual(sphere.minPointZ[2], float('inf'))

        self.assertNotEqual(sphere.maxPointX[0], float('-inf'))
        self.assertNotEqual(sphere.maxPointY[1], float('-inf'))
        self.assertNotEqual(sphere.maxPointZ[2], float('-inf'))

        for point in points:
            distance = c3d.distance(sphere.center, point)
            self.assertLessEqual(distance, sphere.radius)

        # Point outside the sphere
        pointOutside = [1000.0, 1000.0, 1000.0]
        distance = c3d.distance(sphere.center, pointOutside)
        self.assertGreater(distance, sphere.radius)
    def testBoundingSphereFromPoints(self):
        sphere = BoundingSphere()
        self.assertEqual(len(sphere.center), 0)
        self.assertEqual(sphere.radius, 0.0)

        self.assertEqual(sphere.minPointX[0], float('inf'))
        self.assertEqual(sphere.minPointY[1], float('inf'))
        self.assertEqual(sphere.minPointZ[2], float('inf'))

        self.assertEqual(sphere.maxPointX[0], float('-inf'))
        self.assertEqual(sphere.maxPointY[1], float('-inf'))
        self.assertEqual(sphere.maxPointZ[2], float('-inf'))

        points = [[1.1, 3.2, 4.9],
                  [3.1, 1.0, 21.4],
                  [9.1, 3.2, 2.0],
                  [2.0, 4.0, 9.5]]
        sphere.fromPoints(points)

        self.assertNotEqual(sphere.minPointX[0], float('inf'))
        self.assertNotEqual(sphere.minPointY[1], float('inf'))
        self.assertNotEqual(sphere.minPointZ[2], float('inf'))

        self.assertNotEqual(sphere.maxPointX[0], float('-inf'))
        self.assertNotEqual(sphere.maxPointY[1], float('-inf'))
        self.assertNotEqual(sphere.maxPointZ[2], float('-inf'))

        for point in points:
            distance = c3d.distance(sphere.center, point)
            self.assertLessEqual(distance, sphere.radius)

        # Point outside the sphere
        pointOutside = [1000.0, 1000.0, 1000.0]
        distance = c3d.distance(sphere.center, pointOutside)
        self.assertGreater(distance, sphere.radius)
    def testBoundingSpherePrecision(self):
        x = 533
        y = 383
        z = 9

        geodetic = GlobalGeodetic(True)
        [minx, miny, maxx, maxy] = geodetic.TileBounds(x, y, z)
        ter = TerrainTile(west=minx, south=miny, east=maxx, north=maxy)
        ter.fromFile('tests/data/%s_%s_%s.terrain' % (z, x, y))

        coords = [LLH2ECEF(*coord) for coord in ter.getVerticesCoordinates()]
        sphere = BoundingSphere()
        sphere.fromPoints(coords)
        for coord in coords:
            distance = c3d.distance(sphere.center, coord)
            self.assertLessEqual(distance, sphere.radius)
    def testBoundingSpherePrecision(self):
        x = 533
        y = 383
        z = 9

        geodetic = GlobalGeodetic(True)
        [minx, miny, maxx, maxy] = geodetic.TileBounds(x, y, z)
        ter = TerrainTile(west=minx, south=miny, east=maxx, north=maxy)
        ter.fromFile('tests/data/%s_%s_%s.terrain' % (z, x, y))

        llh2ecef = lambda x: LLH2ECEF(x[0], x[1], x[2])
        coords = ter.getVerticesCoordinates()
        coords = list(map(llh2ecef, coords))
        sphere = BoundingSphere()
        sphere.fromPoints(coords)
        for coord in coords:
            distance = c3d.distance(sphere.center, coord)
            self.assertLessEqual(distance, sphere.radius)