;ò wÀ>c@s¬dkZdkZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d fd „ƒYZ d „Z d fd„ƒYZ de fd„ƒYZdS(NcCs&|d|d|d|dfSdS(Nii(susv(susv((s../biggles/geometry.pyspt_addscCs&|d|d|d|dfSdS(Nii(susv(susv((s../biggles/geometry.pyspt_subscCs||d||dfSdS(Nii(sasu(sasu((s../biggles/geometry.pyspt_mul scCsZti|ƒti|ƒf\}}||d||d||d||dfSdS(Nii(smathscossanglessinscsssu(susanglescss((s../biggles/geometry.pyspt_rot#s$cCsti|d|dƒSdS(Nii(smathshypotsu(su((s../biggles/geometry.pyspt_len'scCsti|d|dƒSdS(Nii(smathsatan2su(su((s../biggles/geometry.pyspt_angle*scCs*t|ƒ}|d||d|fSdS(Nii(spt_lensusr(susr((s../biggles/geometry.pyspt_unit-s cCsZ|tjo|Sn|tjo|Snt|d|dƒt|d|dƒfSdS(Nii(sasNonesbsmin(sasb((s../biggles/geometry.pyspt_min1s   cCs¶|tjo|Sn|tjo|Snt|d|dƒ}|tjot|d|dƒ}nt|d|dƒ}|tjot|d|dƒ}n||fSdS(Nii(sasNonesbsmaxsxsminsy(sasbsysx((s../biggles/geometry.pyspt_max6s    s BoundingBoxcBsÎtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcGsQt|ƒdjo(tt|ƒ|_tt|ƒ|_nt|_t|_dS(Ni( slensargssreducespt_minsselfsp0spt_maxsp1sNone(sselfsargs((s../biggles/geometry.pys__init__Es  cCs$dt|iƒt|iƒfSdS(Ns(%s,%s)(sstrsselfsp0sp1(sself((s../biggles/geometry.pys__str__MscCst|i|iƒSdS(N(s BoundingBoxsselfsp0sp1(sself((s../biggles/geometry.pyscopyPscCs!|itjp |itjSdS(N(sselfsp0sNonesp1(sself((s../biggles/geometry.pysis_nullSscCs5|iƒotSnt|id|idƒSdS(Ni(sselfsis_nullsNonesabssp0sp1(sself((s../biggles/geometry.pyswidthVs cCs5|iƒotSnt|id|idƒSdS(Ni(sselfsis_nullsNonesabssp0sp1(sself((s../biggles/geometry.pysheight\s cCs5|iƒotSnti|iƒ|iƒƒSdS(N(sselfsis_nullsNonesmathshypotswidthsheight(sself((s../biggles/geometry.pysdiagonalbs cCs-|iƒotSn|iƒ|iƒSdS(N(sselfsis_nullsNonesheightswidth(sself((s../biggles/geometry.pys aspect_ratiohs cCs1|iƒotSn|id|idfSdS(Ni(sselfsis_nullsNonesp0sp1(sself((s../biggles/geometry.pysxrangens cCs1|iƒotSn|id|idfSdS(Ni(sselfsis_nullsNonesp0sp1(sself((s../biggles/geometry.pysyrangets cCs |iƒotSn|iSdS(N(sselfsis_nullsNonesp0(sself((s../biggles/geometry.pys lowerleftzs cCs1|iƒotSn|id|idfSdS(Nii(sselfsis_nullsNonesp0sp1(sself((s../biggles/geometry.pys upperleft€s cCs |iƒotSn|iSdS(N(sselfsis_nullsNonesp1(sself((s../biggles/geometry.pys upperright†s cCs1|iƒotSn|id|idfSdS(Nii(sselfsis_nullsNonesp1sp0(sself((s../biggles/geometry.pys lowerrightŒs cCsF|iƒ}|iƒ}|d|dd|d|ddfSdS(Niif2.0(sselfsxrangesxsyrangesy(sselfsysx((s../biggles/geometry.pyscenter’s  cCs4t|i|iƒ|_t|i|iƒ|_dS(N(spt_minsselfsp0sotherspt_maxsp1(sselfsother((s../biggles/geometry.pysunion—scCs:t|i||fƒ|_t|i||fƒ|_dS(N( spt_subsselfsp0sdlsdbspt_addsp1sdrsdt(sselfsdtsdbsdlsdr((s../biggles/geometry.pysdeform›scCs.t|i|ƒ|_t|i|ƒ|_dS(N(spt_addsselfsp0sdpsp1(sselfsdp((s../biggles/geometry.pysshiftŸscCsSt|d|iƒ|iƒfƒ}t|i|ƒ|_t|i |ƒ|_ dS(Nf2.0( spt_mulsfactorsselfswidthsheightsdpspt_subsp0spt_addsp1(sselfsfactorsdp((s../biggles/geometry.pysexpand£s%cCsèttt|iƒ|ƒ|ƒ|ƒ}ttt|iƒ|ƒ|ƒ|ƒ}ttt|i ƒ|ƒ|ƒ|ƒ}ttt|i ƒ|ƒ|ƒ|ƒ}t|t|t||ƒƒƒ|_t|t|t||ƒƒƒ|_dS(N(spt_addspt_rotspt_subsselfs lowerleftspsanglesas lowerrightsbs upperleftscs upperrightsdspt_minsp0spt_maxsp1(sselfsanglespsascsbsd((s../biggles/geometry.pysrotate¨s ''''$cCsã||iƒjoh|iƒ||iƒ}|id|id|df|_|id|id|df|_ne|iƒ|iƒ|}|id|d|idf|_|id|d|idf|_dS(Niii( sratiosselfs aspect_ratiosheightswidthsdhsp0sp1sdw(sselfsratiosdwsdh((s../biggles/geometry.pysmake_aspect_ratio°s%)%cCsp|id|djoE|d|idjo-|id|djo|d|idjodSndSdS(Nii(sselfsp0sqsp1(sselfsq((s../biggles/geometry.pyscontainsºs`(s__name__s __module__s__init__s__str__scopysis_nullswidthsheightsdiagonals aspect_ratiosxrangesyranges lowerlefts upperlefts upperrights lowerrightscentersunionsdeformsshiftsexpandsrotatesmake_aspect_ratioscontains(((s../biggles/geometry.pys BoundingBoxCs,                     cCsâ|dd|dd|dd|dd}|dd|dd|dd|dd}|dd|dd|dd|dd}|dd|dd|dd|dd}||f||ffSdS(Nii(sAsBsC00sC01sC10sC11(sAsBsC00sC01sC11sC10((s../biggles/geometry.pys_matrix_multipyÅs 2222sAffineTransformcBs,tZd„Zd„Zd„Zd„ZRS(NcCs.ddf|_ddfddff|_dS(Nf0.0f1.0(sselfstsm(sself((s../biggles/geometry.pys__init__ÎscCst|id|idd||idd|}|id|idd||idd|}||fSdS(Nii(sselfstsmsxsyspsq(sselfsxsysqsp((s../biggles/geometry.pys__call__Òs33cCs’ti|ƒ}ti|ƒ}|id|idd||idd|}|id|idd||idd|}||fSdS(Nii( sNumericsasarraysxsx_sysy_sselfstsmspsq(sselfsxsysqspsx_sy_((s../biggles/geometry.pyscall_vec×s 33cCs<||id|idƒ|_t|i|iƒ|_dS(Nii(sselfsothersts_matrix_multiplysm(sselfsother((s../biggles/geometry.pyscomposeÞs (s__name__s __module__s__init__s__call__scall_vecscompose(((s../biggles/geometry.pysAffineTransformÌs   sRectilinearMapcBstZd„ZRS(Nc Cs±ti|ƒ|iƒ|iƒ}|iƒ|iƒ}|i ƒ|i ƒf\}}|d||d}|d||d}||f|_|dfd|ff|_dS(Niif0.0(sAffineTransforms__init__sselfsdestswidthssrcssxsheightssys lowerleftspsqstxstystsm( sselfssrcsdestssyssxstxstysqsp((s../biggles/geometry.pys__init__äs (s__name__s __module__s__init__(((s../biggles/geometry.pysRectilinearMapâs(smathsNumericspt_addspt_subspt_mulspt_rotspt_lenspt_anglespt_unitspt_minspt_maxs BoundingBoxs_matrix_multipysAffineTransformsRectilinearMap(spt_lenspt_subspt_addspt_maxsNumericspt_mulspt_anglespt_unitspt_minspt_rots_matrix_multipysRectilinearMapsAffineTransforms BoundingBoxsmath((s../biggles/geometry.pys?s         ‚