Skip to main content

Compute the smallest bounding ball of a point cloud. Cython binding of the popular miniball utility. Fast!

Project description

cyminiball

image License Build Status Coverage Status CodeFactor DeepSource

Cyminiball is a utility to compute the smallest bounding ball of a point cloud in arbitrary dimensions. A Python/Cython binding of the popular miniball utility by Bernd Gärtner.

The code is provided under the LGPLv3 license.

For an implementation in pure Python, see miniball. cyminiball can be used as a drop-in replacement for miniball; it runs much faster because it is based on an effcient C++ implementation.

Installation:

pip install cyminiball

Usage:

import cyminiball as miniball
import numpy as np

d = 2           # Number of dimensions
n = 10000       # Number of points
dt = np.float   # Data type

points = np.random.randn(n, d)
points = points.astype(dt)
C, r2 = miniball.compute(points)
print("Center:", C)
print("Radius:", np.sqrt(r2))

Additional output can be generated using the details flag and compute_max_chord().

C, r2, info = miniball.compute(points, details=True)
# Returns an info dict with the following keys:
#       center:         center
#       radius:         radius
#       support:        indices of the support points
#       relative_error: error measure realtive to r2
#       is_valid:       numerical validity
#       elapsed:        time required
#
# The maximal chord is the longest line connecting any
# two of the support points. The following extends the
# info dict by the following keys:
#       pts_max:        point coordinates of the two points
#       ids_max:        ids of the two extreme points
#       d_max:          length of the maximal chord
(p1, p2), d_max = miniball.compute_max_chord(points, info=info)

See examples/examples.py for further usage examples

Build

To build the package requires

  • Python 3.x
  • Cython
  • numpy
git clone https://github.com/hirsch-lab/cyminiball.git
cd cyminiball
python setup.py build_ext --inplace
python setup.py sdist bdist_wheel
python test/test_all.py
python examples/examples.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cyminiball-2.0.0.tar.gz (181.5 kB view hashes)

Uploaded Source

Built Distribution

cyminiball-2.0.0-cp36-cp36m-macosx_10_9_x86_64.whl (151.5 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page