o
    ç^i×  ã                   @   s*   d dl Zd dlmZ d	dd„Zdd„ ZdS )
é    N)Úelliprg©ç      ð?r   r   Fc              	   C   s¤  | dks|dks|dkrt dƒ‚tjd tj|  }t tj| ||f  | ¡}t tj| ||f | d ¡}tdƒD ]6}|| ||  d dkrQ||  d8  < t || || || ¡}	d|	vrq||  t |	|	dk  ¡8  < q;tj|d |d |d …|d |d |d …|d |d |d …f \}
}}|s¶|
t	| ƒ d |t	|ƒ d  |t	|ƒ d  dk}|S |
t	| ƒ d |t	|ƒ d  |t	|ƒ d  d }|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Úarr© r!   úN/var/www/html/RAG/RAG_venv/lib/python3.10/site-packages/skimage/draw/draw3d.pyÚ	ellipsoid   s.   €þ
ÿ44þr#   c                 C   sj   | dks|dks|dkrt dƒ‚dtj |  | | }d| td| d  d|d  d|d  ƒ }||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Úsurfr!   r!   r"   Úellipsoid_statsA   s
   !,r'   )r   F)Únumpyr
   Úscipy.specialr   r#   r'   r!   r!   r!   r"   Ú<module>   s    
<