Source code for pyrr.sphere

# -*- coding: utf-8 -*-
"""Provide functions for the creation and manipulation of 3D Spheres.

Sphere are represented using a numpy.array of shape (4,).

The first three values are the sphere's position.
The fourth value is the sphere's radius.
"""
from __future__ import absolute_import, division, print_function
import numpy as np
from .utils import all_parameters_as_numpy_arrays, parameters_as_numpy_arrays

[docs]@parameters_as_numpy_arrays('center') def create(center=None, radius=1.0, dtype=None): if center is None: center = [0.,0.,0.] return np.array([center[0], center[1], center[2], radius], dtype=dtype)
[docs]@parameters_as_numpy_arrays('points') def create_from_points(points, dtype=None): """Creates a sphere centred around 0,0,0 that encompasses the furthest point in the provided list. :param numpy.array points: An Nd array of vectors. :rtype: numpy.array return: A sphere as a two value tuple, [centre, radius]. """ dtype = dtype or points.dtype # calculate the lengths of all the points # use squared length to save processing lengths = np.apply_along_axis( np.sum, points.ndim - 1, points**2 ) # find the maximum value maximum = lengths.max() # square root this, this is the radius radius = np.sqrt(maximum) return np.array([0.0, 0.0, 0.0, radius], dtype=dtype)
[docs]@all_parameters_as_numpy_arrays def position(sphere): """Returns the position of the sphere. :param numpy.array sphere: The sphere to extract the position from. :rtype: numpy.array :return: The centre of the sphere. """ return sphere[:3].copy()
[docs]@all_parameters_as_numpy_arrays def radius(sphere): """Returns the radius of the sphere. :param numpy.array sphere: The sphere to extract the radius from. :rtype: float :return: The radius of the sphere. """ return sphere[3]