
    \i?                      l    S r SSKJrJrJrJr  SSKrSSKr/ SQr	S r
S rSS jrSS jrSS	 jrSS
 jrg)zBAffine transforms, both in general and specific, named transforms.    )cospisintanN)affine_transformrotatescaleskew	translatec                 b  ^^^^^^^	^
^^^^^ [        U5      S:X  a+  SmUu  mmmmmmU R                  (       a  SmSmS=m=m=m	=m
mO?[        U5      S:X  a%  SmUu  mmmmmmm	m
mmmmU R                  (       d  SmO[        S5      eUUUUUUU	U
UUUUU4S jn[        R                  " XTS:H  S	9$ )
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 coefficientsc                   > TS:X  aM  U R                   u  pTU-  T	U-  -   T-   nTU-  TU-  -   T-   n[        R                  " X4/5      R                   nU$ TS:X  am  U R                   u  pnTU-  T	U-  -   T
U-  -   T-   nTU-  TU-  -   TU-  -   T-   nTU-  TU-  -   TU-  -   T-   n[        R                  " X4U/5      R                   nW$ )Nr   r   )Tnpstack)coordsxyxpypresultzzpabcdefghindimxoffyoffzoffs           S/var/www/html/kml_chatgpt/mouzaenv/lib/python3.13/site-packages/shapely/affinity.py_affine_coords(affine_transform.<locals>._affine_coordsH   s    
 1988DAQQ%BQQ%BXXrh'))F  QYhhGA!QQQ&-BQQQ&-BQQQ&-BXXrrl+--F    )	include_z)lenhas_z
ValueErrorshapely	transform)geommatrixr-   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   s      @@@@@@@@@@@@@r,   r   r      s    L 6{a!'1aD$::DA#&&A&&A&D	V	6<31aAq!Q4tzzDGHH  $ TTQYGGr/   c                    US:X  a  U R                   u  p4pVXS-   S-  Xd-   S-  4nOeUS:X  a  U R                  R                  S   nOE[        U[        5      (       a  [        SU< S35      e[        USS5      S	:X  a  UR                  S   n[        U5      S
;  a  [        S5      eUS:X  a  USS $ [        U5      S:X  a  US-   $ U$ )a!  Return 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 recognized	geom_typeNPoint)r   r   z8Expected number of items in 'origin' to be either 2 or 3r   )r   )boundsr:   r   
isinstancestrr3   getattrr1   )r6   originr(   minxminymaxxmaxys          r,   interpret_originrF   ]   s     !%D;#%s':;	:	%%a(	FC	 	 ,VJ6HIJJ	d	+w	6q! 6{& STTqya{v;!F?"Mr/   c                 2   U R                   (       a  U $ U(       d  U[        -  S-  n[        U5      n[        U5      n[	        U5      S:  a  Sn[	        U5      S:  a  Sn[        XS5      u  pgXE* SXTSSSSXfU-  -
  Xu-  -   XvU-  -
  Xt-  -
  S4n[        X5      $ )a  Return 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   absrF   r   )	r6   anglerA   use_radianscospsinpx0y0r7   s	            r,   r   r   ~   s    , }}
U"u:Du:D
4y7
4y7dA.FB E3#39nry("Dy.29*DcKF
 D))r/   c                     U R                   (       a  U $ [        XS5      u  pVnUSSSUSSSUXUU-  -
  XfU-  -
  XwU-  -
  4n[        X5      $ )a~  Return 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   )rJ   rF   r   )	r6   xfactyfactzfactrA   rP   rQ   z0r7   s	            r,   r	   r	      se    , }}!$2JBB S#5#3:orJ%ZAF
 D))r/   c                 4   U R                   (       a  U $ U(       d  U[        -  S-  nU[        -  S-  n[        U5      n[        U5      n[        U5      S:  a  Sn[        U5      S:  a  Sn[	        XS5      u  pxSUSUSSSSSU* U-  U* U-  S4n	[        X	5      $ )ac  Return 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)
rH   rI   r   r   r   )rJ   r   r   rK   rF   r   )
r6   xsysrA   rM   tanxtanyrP   rQ   r7   s
             r,   r
   r
      s    * }}"Wu_"Wu_r7Dr7D
4y7
4y7dA.FB 4C3cDj2#*c+F
 D))r/   c                 X    U R                   (       a  U $ SSSSSSSSSXU4n[        X5      $ )zReturn 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   )rJ   r   )r6   r)   r*   r+   r7   s        r,   r   r      s@     }} 333$ F
 D))r/   )r9   F)r   r   r   r9   )r   r   r9   F)r   r   r   )__doc__mathr   r   r   r   numpyr   r4   __all__r   rF   r   r	   r
   r    r/   r,   <module>rb      s>    H " "  
FNHbB(*V *F(*V*r/   