Package: anglr
Planar angle mathematics library for Python.This library contains many different functions for converting between units, comparing angles, and doing angle arithmetic.Links:PyPIGitHubQuickstart:pip3 install anglr.RationaleConsider the following trivial angle comparison code:importmathheading=get_compass_value()# angle in radians normalized to $[0, 2*pi)$iftarget-math.pi/4<=heading<=target+math.pi/4:print("Facing the target")else:print("Not facing the target")Angle code is everywhere. The above is totally, utterlywrong(consider what happens whentargetis 0), yet this could easily be overlooked while writing and during code review.With anglr, there is a better way:importmathfromanglrimportAngleheading=Angle(get_compass_value())ifheading.angle_between(target)<=math.pi/4:print("Facing the target")else:print("Not facing the target")Much better - this will now correctly take modular arithmetic into account when comparing angles.ExamplesAngle creation:frommathimportpifromanglrimportAngleprint(Angle())print(Angle(87*pi/2))print(Angle(pi/2,"radians"))print(Angle(Angle(pi/2,"radians")))# same as aboveprint(Angle(64.2,"degrees"))print(Angle(384.9,"gradians"))print(Angle(4.5,"hours"))print(Angle(203.8,"arcminutes"))print(Angle(42352.7,"arcseconds"))print(Angle((56,32),"vector"))# angle in standard position - counterclockwise from positive X-axisAngle conversion:fromanglrimportAnglex=Angle(58.3)print([x],str(x),x.radians,x.degrees,x.gradians,x.hours,x.arcminutes,x.arcseconds,x.vector,x.x,x.y)print(complex(x))print(float(x))print(int(x))x.radians=pi/2print(x.dump())x.degrees=64.2print(x.dump())x.gradians=384.9print(x.dump())x.hours=4.5print(x.dump())x.arcminutes=203.8print(x.dump())x.arcseconds=42352.7print(x.dump())x.vector=(56,32)print(x.dump())Angle arithmetic:frommathimportpifromanglrimportAngleprint(Angle(pi/6)+Angle(2*pi/3))print(x*2+Angle(3*pi/4)/4+5*Angle(pi/3))print(-abs(+Angle(pi)))print(round(Angle(-75.87)))print(Angle(-4.3)<=Angle(pi/4)>Angle(0.118)==Angle(0.118))print(Angle(-870.3,"gradians").normalized())print(Angle(-870.3,"gradians").normalized(0))# same as aboveprint(Angle(-870.3,"gradians").normalized(0,2*pi))# same as aboveprint(Angle(-870.3,"gradians").normalized(-pi,pi))print(Angle(-870.3,"gradians").normalized(-pi,0))print(Angle(1,"degrees").angle_between_clockwise(Angle(0,"degrees")))print(Angle(1,"degrees").angle_between(Angle(0,"degrees")))print(Angle(0,"degrees").angle_within(Angle(-45,"degrees"),Angle(45,"degrees")))print(Angle(-1,"degrees").angle_within(Angle(-1,"degrees"),Angle(1,"degrees"),strictly_within=True))print(Angle(-1,"degrees").angle_to(Angle(180,"degrees")))print(Angle(0,"degrees").angle_to(Angle(180,"degrees")))To run all of the above as tests, simply runpython3 tests.pyin the project directory.InstallingThe easiest way to install this is usingpip3 install anglr.Otherwise, download the source distribution fromPyPI, and extract the archive.In the folder, runpython3 setup.py install.RequirementsThis library requires Python 3.2 or higher to run.AuthorsUberi <azhang9@gmail.com> (Anthony Zhang)Please report bugs and suggestions at theissue tracker!LicenseCopyright 2014-2015Anthony Zhang (Uberi).The source code is available online atGitHub.This program is made available under the 3-clause BSD license. SeeLICENSE.txtfor more information.