miniballcpp 0.2.3


pip install miniballcpp

  Latest version

Released: Nov 19, 2022

Project Links

Meta
Author: Bernd Gärtner, Konstantin Weddige

Classifiers

License
  • OSI Approved :: GNU General Public License v3 (GPLv3)

Programming Language
  • Python

Topic
  • Scientific/Engineering
  • Scientific/Engineering :: Mathematics
  • Software Development :: Libraries
  • Utilities

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())

Wheel compatibility matrix

Platform CPython 3.6 CPython 3.7 CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 PyPy 3.7 (pp73) PyPy 3.8 (pp73) PyPy 3.9 (pp73)
macosx_10_9_x86_64
manylinux2014_i686
manylinux2014_x86_64
manylinux_2_17_i686
manylinux_2_17_x86_64
musllinux_1_1_i686
musllinux_1_1_x86_64
win32
win_amd64

Files in release

MiniballCpp-0.2.3-cp310-cp310-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (58.1KiB)
MiniballCpp-0.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.4KiB)
MiniballCpp-0.2.3-cp310-cp310-musllinux_1_1_i686.whl (645.8KiB)
MiniballCpp-0.2.3-cp310-cp310-musllinux_1_1_x86_64.whl (594.8KiB)
MiniballCpp-0.2.3-cp310-cp310-win32.whl (23.3KiB)
MiniballCpp-0.2.3-cp310-cp310-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-cp311-cp311-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (58.1KiB)
MiniballCpp-0.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.5KiB)
MiniballCpp-0.2.3-cp311-cp311-musllinux_1_1_i686.whl (646.7KiB)
MiniballCpp-0.2.3-cp311-cp311-musllinux_1_1_x86_64.whl (595.6KiB)
MiniballCpp-0.2.3-cp311-cp311-win32.whl (23.3KiB)
MiniballCpp-0.2.3-cp311-cp311-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-cp36-cp36m-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (58.4KiB)
MiniballCpp-0.2.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.6KiB)
MiniballCpp-0.2.3-cp36-cp36m-musllinux_1_1_i686.whl (645.9KiB)
MiniballCpp-0.2.3-cp36-cp36m-musllinux_1_1_x86_64.whl (594.7KiB)
MiniballCpp-0.2.3-cp36-cp36m-win32.whl (23.3KiB)
MiniballCpp-0.2.3-cp36-cp36m-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-cp37-cp37m-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (58.4KiB)
MiniballCpp-0.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.6KiB)
MiniballCpp-0.2.3-cp37-cp37m-musllinux_1_1_i686.whl (646.8KiB)
MiniballCpp-0.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl (595.6KiB)
MiniballCpp-0.2.3-cp37-cp37m-win32.whl (23.2KiB)
MiniballCpp-0.2.3-cp37-cp37m-win_amd64.whl (24.5KiB)
MiniballCpp-0.2.3-cp38-cp38-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (58.7KiB)
MiniballCpp-0.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (59.1KiB)
MiniballCpp-0.2.3-cp38-cp38-musllinux_1_1_i686.whl (646.1KiB)
MiniballCpp-0.2.3-cp38-cp38-musllinux_1_1_x86_64.whl (595.1KiB)
MiniballCpp-0.2.3-cp38-cp38-win32.whl (23.3KiB)
MiniballCpp-0.2.3-cp38-cp38-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-cp39-cp39-macosx_10_9_x86_64.whl (22.6KiB)
MiniballCpp-0.2.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (57.9KiB)
MiniballCpp-0.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (58.3KiB)
MiniballCpp-0.2.3-cp39-cp39-musllinux_1_1_i686.whl (645.7KiB)
MiniballCpp-0.2.3-cp39-cp39-musllinux_1_1_x86_64.whl (594.7KiB)
MiniballCpp-0.2.3-cp39-cp39-win32.whl (23.3KiB)
MiniballCpp-0.2.3-cp39-cp39-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (21.8KiB)
MiniballCpp-0.2.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.3KiB)
MiniballCpp-0.2.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23.1KiB)
MiniballCpp-0.2.3-pp37-pypy37_pp73-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (21.8KiB)
MiniballCpp-0.2.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.2KiB)
MiniballCpp-0.2.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.9KiB)
MiniballCpp-0.2.3-pp38-pypy38_pp73-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (21.8KiB)
MiniballCpp-0.2.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (23.2KiB)
MiniballCpp-0.2.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (22.9KiB)
MiniballCpp-0.2.3-pp39-pypy39_pp73-win_amd64.whl (24.6KiB)
MiniballCpp-0.2.3.tar.gz (20.0KiB)
No dependencies