
 m[c           @` s  d  Z  d d l m Z m Z m Z m Z d d l Z d d l m Z d d l	 Z
 d d l j Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e Z d   Z d   Z d   Z d   Z d S(   u,   
Various transforms used for by the 3D code
i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   zipc   	      C` s   |  d  \ } } | d  \ } } | | k rA d } d } | } nH | | k rc d } d } | } n& | | } | | } | | | | } | | | f S(   u<   
    Return 2D equation of line in the form ax+by+c = 0
    i   ii    i   (    (	   t   p0t   p1t   x0t   y0t   x1t   y1t   at   bt   c(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   line2d   s    	


c         C` sN   |  \ } } } | \ } } t  | | | | | t j | d | d   S(   uO   
    Distance from line to point
    line is a tuple of coefficients a,b,c
    i   (   t   abst   npt   sqrt(   t   lt   pR   R   R   R   R   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   line2d_dist'   s    c   	      C` s   | d |  d } | d |  d } t  j | d  |  d } t  j | d  |  d } | | | | | d | d } t  j | d d  } t  j | | | d | | | d  } | S(   u   distance(s) from line defined by p1 - p2 to point(s) p0

    p0[0] = x(s)
    p0[1] = y(s)

    intersection point p = p1 + u*(p2-p1)
    and intersection point lies within segment if u is between 0 and 1
    i    i   i   (   R   t   asarrayt   clipR   (	   R   t   p2R   t   x21t   y21t   x01t   y01t   ut   d(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   line2d_seg_dist1   s    
"+c         C` s-   t  j |  d d |  d d |  d d  S(   u   3d vector lengthi    i   i   (   R   R   (   t   v(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   modG   s    c   	      C` s   | |  | | | | } } } t  j d | d d |  | g d d | d | | g d d d | | | g d d d d g g  S(   Ng      ?i    (   R   t   array(	   t   xmint   xmaxt   ymint   ymaxt   zmint   zmaxt   dxt   dyt   dz(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   world_transformationK   s     c         C` s  |  | } | t  |  } t j | |  } | t  |  } t j | |  } | d | d | d d g | d | d | d d g | d | d | d d g d d d d g g } d d d |  d g d d d |  d g d d d |  d g d d d d g g } t j | |  S(   Ni    i   i   (   R    R   t   crosst   dot(   t   Et   Rt   Vt   nR   R   t   Mrt   Mt(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   view_transformationV   s    
c         C` sq   |  | |  | } d |  | |  | } t  j d d d d g d d d d g d d | | g d d d d g g  S(   Nii   i    i(   R   R!   (   t   zfrontt   zbackR   R   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   persp_transformationv   s    c         C` s_   |  | } |  | } t  j d d d d g d d d d g d d d d g d d | | g g  S(   Ni   i    i(   R   R!   (   R5   R6   R   R   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   ortho_transformation   s    c         C` sU   t  j | |   } | d } | d | | d | | d | } } } | | | f S(   Ni   i    i   i   (   R   R-   (   t   vect   Mt   vecwt   wt   txst   tyst   tzs(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_transform_vec   s    
,c         C` s   t  j | |   } | d } | d | | d | | d | } } } d | d k | d d k @d | d k @| d d k @} t  j |  r | d d k  } n  | | | | f S(   Ni   i    i   i   (   R   R-   t   any(   R9   R:   R;   R<   R=   R>   R?   t   tis(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_transform_vec_clip   s    
,:c         C` sr   t  j |  } t |  | |  } t j | |  } y | | d } Wn t k
 rX n X| d | d | d f S(   Ni   i    i   i   (   t   linalgt   invt   vec_pad_onesR   R-   t   OverflowError(   t   xst   yst   zsR:   t   iMR9   t   vecr(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   inv_transform   s    c         C` s"   t  j |  | | t  j |   g  S(   N(   R   R!   t	   ones_like(   RH   RI   RJ   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyRF      s    c         C` s   t  |  | |  } t | |  S(   u7   
    Transform the points by the projection matrix
    (   RF   R@   (   RH   RI   RJ   R:   R9   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_transform   s    c         C` s   t  |  | |  } t | |  S(   uv   
    Transform the points by the projection matrix
    and return the clipping result
    returns txs,tys,tzs,tis
    (   RF   RC   (   RH   RI   RJ   R:   R9   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_transform_clip   s    c         C` s   t  j t |  |   S(   N(   R   t   column_stackt   proj_trans_points(   t   pointsR:   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_points   s    c         C` s(   t  |    \ } } } t | | | |  S(   N(   R   RO   (   RS   R:   RH   RI   RJ   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyRR      s    c         C` s(   t  |    \ } } } t | | | |  S(   N(   R   RP   (   RS   R:   RH   RI   RJ   (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   proj_trans_clip_points   s    c         C` s{   t  j |  t  j |  } } t  j d d d d g d | | d g d | | d g d d d d g g  } t  j | |   S(   Ni   i    (   R   t   cost   sinR!   R-   (   R0   t   alphat   cosat   sinat   M1(    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   rot_x   s    (    t   __doc__t
   __future__R    R   R   R   t   sixt	   six.movesR   t   numpyR   t   numpy.linalgRD   R   R   R   R    R+   R4   R7   R8   R@   RC   RM   RF   RO   RP   t	   transformRT   RR   RU   R\   (    (    (    s:   lib/python2.7/site-packages/mpl_toolkits/mplot3d/proj3d.pyt   <module>   s0   "		
				 			
		
	
						