
    |h                     &    d dl Zd dlmZ ddZd Zy)    N)elliprgc           	         | dk  s
|dk  s|dk  rt        d      t        j                  d   t        j                  |   z  }t        j                  t        j                  | ||f    |z
        }t        j                  t        j                  | ||f   |z   dz         }t        d      D ]k  }||   ||   z
  dz  dk(  r||xx   dz  cc<   t        j                  ||   ||   ||         }	d|	vsF||xx   t        j                  |	|	dk           z  cc<   m t        j                  |d   |d   |d   |d   |d   |d   |d   |d   |d   f   \  }
}}|s:|
t        |       z  dz  |t        |      z  dz  z   |t        |      z  dz  z   dk  }|S |
t        |       z  dz  |t        |      z  dz  z   |t        |      z  dz  z   dz
  }|S )a  Generate ellipsoid for given semi-axis lengths.

    The respective semi-axis lengths are given along three dimensions in
    Cartesian coordinates. Each dimension may use a different grid spacing.

    Parameters
    ----------
    a : float
        Length of semi-axis along x-axis.
    b : float
        Length of semi-axis along y-axis.
    c : float
        Length of semi-axis along z-axis.
    spacing : 3-tuple of floats
        Grid spacing in three spatial dimensions.
    levelset : bool
        If True, returns the level set for this ellipsoid (signed level
        set about zero, with positive denoting interior) as np.float64.
        False returns a binarized version of said level set.

    Returns
    -------
    ellipsoid : (M, N, P) array
        Ellipsoid centered in a correctly sized array for given `spacing`.
        Boolean dtype unless `levelset=True`, in which case a float array is
        returned with the level set above 0.0 representing the ellipsoid.

    r   &Parameters a, b, and c must all be > 0)   r   r   r         )

ValueErrornpr_ceilfloorrangearangemaxmgridfloat)abcspacinglevelsetoffsetlowhighdimnumxyzarrs                 R/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/draw/draw3d.py	ellipsoidr"      s   : 	
QAFQABBUU7^beeGn,F ''255Aq>/F*
+C88BEE!Q'NV+a/0DQx -IC A%*HMHiiC$s)WS\:C<Hs37|,,H- hhAa71:%Aa71:%Aa71:%	'GAq! E!H"a%(lq%88AaLQ;NNSTT J E!H"a%(lq%88AaLQ;NNRSSJ    c                     | dk  s
|dk  s|dk  rt        d      dt        j                  z  | z  |z  |z  }d|z  t        d| dz  z  d|dz  z  d|dz  z        z  }||fS )a  Calculate analytical volume and surface area of an ellipsoid.

    The surface area of an ellipsoid is given by

    .. math:: S=4\pi b c R_G\!\left(1, \frac{a^2}{b^2}, \frac{a^2}{c^2}\right)

    where :math:`R_G` is Carlson's completely symmetric elliptic integral of
    the second kind [1]_. The latter is implemented as
    :py:func:`scipy.special.elliprg`.

    Parameters
    ----------
    a : float
        Length of semi-axis along x-axis.
    b : float
        Length of semi-axis along y-axis.
    c : float
        Length of semi-axis along z-axis.

    Returns
    -------
    vol : float
        Calculated volume of ellipsoid.
    surf : float
        Calculated surface area of ellipsoid.

    References
    ----------
    .. [1] Paul Masson (2020). Surface Area of an Ellipsoid.
           https://analyticphysics.com/Mathematical%20Methods/Surface%20Area%20of%20an%20Ellipsoid.htm

    r   r   gUUUUUU?r   r   r   )r	   r
   pir   )r   r   r   volsurfs        r!   ellipsoid_statsr(   A   s}    B 	
QAFQABB BEE/A

!A
%C s7WQAXq1a4xQT::D9r#   ))      ?r)   r)   F)numpyr
   scipy.specialr   r"   r(    r#   r!   <module>r-      s     !9x*r#   