a
    J5d                     @   sp   d Z ddlmZmZmZmZ ddlZddlZg dZ	dd Z
dd ZdddZdddZdddZdddZdS )zBAffine transforms, both in general and specific, named transforms.    )cospisintanN)affine_transformrotatescaleskew	translatec                    s  t |dkrDd}|\}}}}}}| jrd}d}	d }
 } } }}n@t |dkr|d}|\}}}
}}}}}}	}}}| jsd}ntd|dkrtj||g||ggtd tj||gtdn:tj|||
g|||g|||	ggtd tj|||gtd fd	d
}tj| ||dkdS )a$  Return a transformed geometry using an affine transformation matrix.

    The coefficient matrix is provided as a list or tuple with 6 or 12 items
    for 2D or 3D transformations, respectively.

    For 2D affine transformations, the 6 parameter matrix is::

        [a, b, d, e, xoff, yoff]

    which represents the augmented matrix::

        [x']   / a  b xoff \ [x]
        [y'] = | d  e yoff | [y]
        [1 ]   \ 0  0   1  / [1]

    or the equations for the transformed coordinates::

        x' = a * x + b * y + xoff
        y' = d * x + e * y + yoff

    For 3D affine transformations, the 12 parameter matrix is::

        [a, b, c, d, e, f, g, h, i, xoff, yoff, zoff]

    which represents the augmented matrix::

        [x']   / a  b  c xoff \ [x]
        [y'] = | d  e  f yoff | [y]
        [z']   | g  h  i zoff | [z]
        [1 ]   \ 0  0  0   1  / [1]

    or the equations for the transformed coordinates::

        x' = a * x + b * y + c * z + xoff
        y' = d * x + e * y + f * z + yoff
        z' = g * x + h * y + i * z + zoff
                   ?           z,'matrix' expects either 6 or 12 coefficients)Zdtypec                    s   t  | jj S )N)npmatmulT)coordsAoff L/var/www/html/django/DPS/env/lib/python3.9/site-packages/shapely/affinity.py_affine_coordsG   s    z(affine_transform.<locals>._affine_coords)Z	include_z)lenZhas_z
ValueErrorr   arrayfloatshapelyZ	transform)geommatrixndimabdexoffyofficfghzoffr   r   r   r   r      s(    &&r   c                 C   s   |dkr0| j \}}}}|| d || d f}nL|dkrF| jjd }n6t|trbtd|dnt|ddd	kr||jd }t|d
vrtd|dkr|dd S t|dkr|d S |S dS )a6  Returns interpreted coordinate tuple for origin parameter.

    This is a helper function for other transform functions.

    The point of origin can be a keyword 'center' for the 2D bounding box
    center, 'centroid' for the geometry's 2D centroid, a Point object or a
    coordinate tuple (x0, y0, z0).
    centerg       @centroidr   z'origin' keyword z is not recognizedZ	geom_typeNZPoint)r   r   z8Expected number of items in 'origin' to be either 2 or 3r   )r   )Zboundsr0   r   
isinstancestrr   getattrr   )r    originr"   ZminxZminyZmaxxZmaxyr   r   r   interpret_originM   s     


r5   r/   Fc           	      C   s   | j r
| S |s|t d }t|}t|}t|dk r:d}t|dk rJd}t| |d\}}|| d||dddd|||  ||  |||  ||  df}t| |S )a  Returns a rotated geometry on a 2D plane.

    The angle of rotation can be specified in either degrees (default) or
    radians by setting ``use_radians=True``. Positive angles are
    counter-clockwise and negative are clockwise rotations.

    The point of origin can be a keyword 'center' for the bounding box
    center (default), 'centroid' for the geometry's centroid, a Point object
    or a coordinate tuple (x0, y0).

    The affine transformation matrix for 2D rotation is:

      / cos(r) -sin(r) xoff \
      | sin(r)  cos(r) yoff |
      \   0       0      1  /

    where the offsets are calculated from the origin Point(x0, y0):

        xoff = x0 - x0 * cos(r) + y0 * sin(r)
        yoff = y0 - x0 * sin(r) - y0 * cos(r)
         f@V瞯<r   r   r   )is_emptyr   r   r   absr5   r   )	r    Zangler4   use_radiansZcospZsinpx0y0r!   r   r   r   r   n   s"    &r   r   c           	      C   sZ   | j r
| S t| |d\}}}|ddd|ddd||||  |||  |||  f}t| |S )a  Returns a scaled geometry, scaled by factors along each dimension.

    The point of origin can be a keyword 'center' for the 2D bounding box
    center (default), 'centroid' for the geometry's 2D centroid, a Point
    object or a coordinate tuple (x0, y0, z0).

    Negative scale factors will mirror or reflect coordinates.

    The general 3D affine transformation matrix for scaling is:

        / xfact  0    0   xoff \
        |   0  yfact  0   yoff |
        |   0    0  zfact zoff |
        \   0    0    0     1  /

    where the offsets are calculated from the origin Point(x0, y0, z0):

        xoff = x0 - x0 * xfact
        yoff = y0 - y0 * yfact
        zoff = z0 - z0 * zfact
    r   r   )r8   r5   r   )	r    ZxfactZyfactZzfactr4   r;   r<   Zz0r!   r   r   r   r      s    r   r   c           
      C   s   | j r
| S |s&|t d }|t d }t|}t|}t|dk rFd}t|dk rVd}t| |d\}}d|d|ddddd| | | | df}	t| |	S )a  Returns a skewed geometry, sheared by angles along x and y dimensions.

    The shear angle can be specified in either degrees (default) or radians
    by setting ``use_radians=True``.

    The point of origin can be a keyword 'center' for the bounding box
    center (default), 'centroid' for the geometry's centroid, a Point object
    or a coordinate tuple (x0, y0).

    The general 2D affine transformation matrix for skewing is:

        /   1    tan(xs) xoff \
        | tan(ys)  1     yoff |
        \   0      0       1  /

    where the offsets are calculated from the origin Point(x0, y0):

        xoff = -y0 * tan(xs)
        yoff = -x0 * tan(ys)
    r6   r7   r   r   r   )r8   r   r   r9   r5   r   )
r    ZxsZysr4   r:   ZtanxZtanyr;   r<   r!   r   r   r   r	      s$    r	   c                 C   s0   | j r
| S ddddddddd|||f}t| |S )zReturns a translated geometry shifted by offsets along each dimension.

    The general 3D affine transformation matrix for translation is:

        / 1  0  0 xoff \
        | 0  1  0 yoff |
        | 0  0  1 zoff |
        \ 0  0  0   1  /
    r   r   )r8   r   )r    r'   r(   r.   r!   r   r   r   r
      s    
r
   )r/   F)r   r   r   r/   )r   r   r/   F)r   r   r   )__doc__mathr   r   r   r   numpyr   r   __all__r   r5   r   r   r	   r
   r   r   r   r   <module>   s   A!
+
#
+