Ńň ÝZ}Jc@s8dZddklZddklZddkZddkiZd„Z d„Z d„Z d„Z d „Z d „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„ZeZd„Zd„Zd„Zdd„Zdd„Zd„Zd„Z d„Z!e"djo eƒndS(s, Various transforms used for by the 3D code i˙˙˙˙(tLineCollection(tCircleNc Csš|d \}}|d \}}||jod}d}|}nK||jod}d}| }n'||}||}||||}|||fS(s< Return 2D equation of line in the form ax+by+c = 0 ii˙˙˙˙ii(( tp0tp1tx0ty0tx1ty1tatbtc((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytline2ds      cCsN|\}}}|\}}t|||||ti|d|dƒƒS(sO Distance from line to point line is a tuple of coefficients a,b,c i(tabstnptsqrt(tltpRR R RR((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyt line2d_dist%s c CsĚ|d|d}|d|d}ti|dƒ|d}ti|dƒ|d}||||tt|d|dƒƒ}ti|ddƒ}ti|||d|||dƒ}|S(sŇ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 segement if u is between 0 and 1 iii(R tasarraytfloatR tclipR( Rtp2Rtx21ty21tx01ty01tutd((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytline2d_seg_dist/s .+c Cs*ddk}|iƒ}d d }}|i||ƒt||ƒ}|\}}d d }}|i||ƒt|||d|dfƒ}t||ti||fƒƒ}xKt|||ƒD]7\}} } t|| f| ddƒ} |i | ƒqÁW|i d dƒ|i d dƒ|i ƒdS(Ni˙˙˙˙iiii–idiČtfilli8˙˙˙(ii(ii–(iiii(idi–iiČ( tpylabtgcatplottziptscatterRR tarrayRt add_patchtxlimtylimtshow( RtaxtxstystpointsRRtdisttxtyRR ((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyttest_lines_distsDs"      !cCs-ti|dd|dd|ddƒS(s3d vector lengthiii(R R(tv((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytmodZsc Cs„||||||}}}tid|dd| |gdd|d| |gddd|| |gddddggƒS(Ngđ?i(R R#( txmintxmaxtymintymaxtzmintzmaxtdxtdytdz((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytworld_transformation^s  cCsHd\}}d\}}d\}}t||||||ƒ}|GHdS( Nidixiœ˙˙˙gš™™™™™š?gš™™™™™É?(idix(iœ˙˙˙id(gš™™™™™š?gš™™™™™É?(R;(R2R3R4R5R6R7tM((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyt test_worldhs    cCs||}|t|ƒ}ti||ƒ}|t|ƒ}ti||ƒ}|d|d|ddg|d|d|ddg|d|d|ddgddddgg}ddd|d gddd|d gddd|d gddddgg}ti||ƒS(Niii(R1R tcrosstdot(tEtRtVtnRR0tMrtMt((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytview_transformationos cCsq||||}d||||}tiddddgddddgdd||gddddggƒS(Niţ˙˙˙iii˙˙˙˙(R R#(tzfronttzbackRR ((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytpersp_transformations cCsUti||ƒ}|d}|d||d||d|}}}|||fS(Niiii(R R?(tvecR<tvecwtwttxsttysttzs((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytproj_transform_vec˜s ,cCsśti||ƒ}|d}|d||d||d|}}}|ddj|ddj|ddj|ddj}ti|ƒo|ddj}n||||fS(Niiii(R R?tsometrue(RJR<RKRLRMRNROttis((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytproj_transform_vec_clipŸs ,:cCstti|ƒ}t|||ƒ}ti||ƒ}y||d}Wntj onX|d|d|dfS(Niiii(tlinalgtinvt vec_pad_onesR R?t OverflowError(R)R*tzsR<tiMRJtvecr((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyt inv_transformŠsc CsŞyuy+ti|||ti|iƒgƒ}WnCttfj o1ti|||tit|ƒƒgƒ}nXWn.tj o"ti|||dgƒ}nX|S(Ni(R R#tonestshapetAttributeErrort TypeErrortlen(R)R*RXRJ((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyRVłs+3 cCst|||ƒ}t||ƒS(s7 Transform the points by the projection matrix (RVRP(R)R*RXR<RJ((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytproj_transform˝scCst|||ƒ}t||ƒS(sv Transform the points by the projection matrix and return the clipping result returns txs,tys,tzs,tis (RVRS(R)R*RXR<RJ((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytproj_transform_clipÄscCstt||ƒŒS(N(R!tproj_trans_points(R+R<((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyt proj_pointsÎscCs(t|Œ\}}}t||||ƒS(N(R!Ra(R+R<R)R*RX((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyRcŃscCs(t|Œ\}}}t||||ƒS(N(R!Rb(R+R<R)R*RX((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytproj_trans_clip_pointsŐsicCsGddk}d|ddgdd|dgddd|g}}}t||||ƒ\}}}|d|df|d|df|d|df|d|dff\} } } } | | f| | f| | fg} |iƒ} t| ƒ}| i|ƒxBt||dddd gƒD]"\}}}|i|||ƒqWdS( Ni˙˙˙˙iiiitoR-R.tz(RRaRRtadd_collectionR!ttext(R<tsRR)R*RXRMRNRORfR(taytaztlinestlinecR-R.tt((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyttest_proj_draw_axesŮs 8"4!   cCsŽ|ptidddgƒd}tidddgƒd}tidddgƒ}t|||ƒ}tddƒ}ti||ƒ}|S(Nii˙˙˙˙iičidiiœ˙˙˙(R R#RFRIR?(R@RARBtviewMtperspMR<((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyttest_proj_make_Mçs#cCsĺddk}tƒ}g}ddddddddd dg D]}|d |q>~}ddddddddddg ddddddddddg ddddddddddg }}}g}|||fD]} |ti| ƒd qÚ~\}}}t|d d ƒt||||ƒ\} } } t| | | |ƒ\} }}|i| | d| ƒ|i| | ddƒx6t | | |ƒD]"\}}}|i |||ƒq‘W|i ddƒ|i ddƒ|i ƒdS(Ni˙˙˙˙iiiiiiiis%di,RjiR trgš™™™™™Éżgš™™™™™É?(RRsR R#RpRaR[R"R R!RiR%R&R'(RR<t_[1]tittsR)R*RXt_[2]R0RMRNROtixstiystizsR-R.Ro((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyt test_projňs"  CB,@cCs{ti|ƒti|ƒ}}tiddddgd|| dgd||dgddddggƒ}ti||ƒS(Nii(R tcostsinR#R?(RBtalphatcosatsinatM1((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pytrot_x s cCsRddddg}t|tidƒGHddddg}t|tidƒGHdS(Niii(RƒR tpi(RB((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyttest_rotst__main__(#t__doc__tmatplotlib.collectionsRtmatplotlib.patchesRtnumpyR t numpy.linalgRTR RRR/R1R;R=RFRIRPRSR[RVRaRbt transformRdRcReRptNoneRsR|RƒR…t__name__(((sA/usr/lib64/python2.6/site-packages/mpl_toolkits/mplot3d/proj3d.pyts<