Skip to main content

Smallest Enclosing Balls of Points

Project description

These are python bindings to Bernd Gärtners miniball software.

Setup

You can install miniball with:

pip install MiniballCpp

There are wheels available for most platforms.

There is also a package for Arch Linux (that is not maintained by me!): https://aur.archlinux.org/packages/python-miniball/.

Example

import math
import random
import miniball

P = [(random.uniform(0, 100), random.uniform(0, 100)) for i in range(10000)]
mb = miniball.Miniball(P)
print('Center', mb.center())
print('Radius', math.sqrt(mb.squared_radius()))

Notes

This algorithm has some numerical challenges worth mentioning. The result may deviate from the optimal result by 10 times the machine epsilon and sometimes even more:

P = [(642123.5528970208, 5424489.146461355),
     (651592.349934072, 5424969.380667617),
     (642591.1068130962, 5425775.320365907),
     (646380.0282527813, 5418648.987550308),
     (648098.891235107, 5426586.3920675),
     (650011.5835629451, 5426132.820254512),
     (650297.6960375579, 5419125.777007122),
     (645249.2122321032, 5421055.739722816),
     (645333.9125837489, 5426228.852409409)]

mb = miniball.Miniball(P)
if not mb.is_valid():
    print('Possibly invalid!')
print('Relative error', mb.relative_error())

If this is a problem for you, shifting the input towards (0,0) may help:

minx = min(P, key=lambda p: p[0])[0]
miny = min(P, key=lambda p: p[1])[1]

P = [(p[0] - minx, p[1] - miny) for p in P]

mb = miniball.Miniball(P)
if not mb.is_valid():
    print('Possibly invalid!')
print('Relative error', mb.relative_error())

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

MiniballCpp-0.2.3.tar.gz (20.5 kB view hashes)

Uploaded Source

Built Distributions

MiniballCpp-0.2.3-pp39-pypy39_pp73-win_amd64.whl (25.2 kB view hashes)

Uploaded PyPy Windows x86-64

MiniballCpp-0.2.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (22.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

MiniballCpp-0.2.3-pp38-pypy38_pp73-win_amd64.whl (25.2 kB view hashes)

Uploaded PyPy Windows x86-64

MiniballCpp-0.2.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.5 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (22.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

MiniballCpp-0.2.3-pp37-pypy37_pp73-win_amd64.whl (25.2 kB view hashes)

Uploaded PyPy Windows x86-64

MiniballCpp-0.2.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (22.3 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp311-cp311-win_amd64.whl (25.2 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

MiniballCpp-0.2.3-cp311-cp311-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.11 Windows x86

MiniballCpp-0.2.3-cp311-cp311-musllinux_1_1_x86_64.whl (609.9 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp311-cp311-musllinux_1_1_i686.whl (662.2 kB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.9 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (59.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp311-cp311-macosx_10_9_x86_64.whl (23.2 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp310-cp310-win_amd64.whl (25.2 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

MiniballCpp-0.2.3-cp310-cp310-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.10 Windows x86

MiniballCpp-0.2.3-cp310-cp310-musllinux_1_1_x86_64.whl (609.1 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp310-cp310-musllinux_1_1_i686.whl (661.3 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.8 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (59.5 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp310-cp310-macosx_10_9_x86_64.whl (23.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp39-cp39-win_amd64.whl (25.2 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

MiniballCpp-0.2.3-cp39-cp39-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.9 Windows x86

MiniballCpp-0.2.3-cp39-cp39-musllinux_1_1_x86_64.whl (608.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp39-cp39-musllinux_1_1_i686.whl (661.2 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.7 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (59.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp39-cp39-macosx_10_9_x86_64.whl (23.2 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp38-cp38-win_amd64.whl (25.2 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

MiniballCpp-0.2.3-cp38-cp38-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.8 Windows x86

MiniballCpp-0.2.3-cp38-cp38-musllinux_1_1_x86_64.whl (609.4 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp38-cp38-musllinux_1_1_i686.whl (661.6 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.5 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (60.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp38-cp38-macosx_10_9_x86_64.whl (23.2 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp37-cp37m-win_amd64.whl (25.1 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

MiniballCpp-0.2.3-cp37-cp37m-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.7m Windows x86

MiniballCpp-0.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl (609.9 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp37-cp37m-musllinux_1_1_i686.whl (662.3 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.0 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (59.8 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp37-cp37m-macosx_10_9_x86_64.whl (23.1 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

MiniballCpp-0.2.3-cp36-cp36m-win_amd64.whl (25.1 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

MiniballCpp-0.2.3-cp36-cp36m-win32.whl (23.8 kB view hashes)

Uploaded CPython 3.6m Windows x86

MiniballCpp-0.2.3-cp36-cp36m-musllinux_1_1_x86_64.whl (609.0 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

MiniballCpp-0.2.3-cp36-cp36m-musllinux_1_1_i686.whl (661.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

MiniballCpp-0.2.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.1 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

MiniballCpp-0.2.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (59.8 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

MiniballCpp-0.2.3-cp36-cp36m-macosx_10_9_x86_64.whl (23.1 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