Skip to main content
Downloads Latest Version Development Status Supported Python Versions License

Planar angle mathematics library for Python.

This library contains many different functions for converting between units, comparing angles, and doing angle arithmetic.

Links:

Quickstart: pip3 install anglr.

Rationale

Consider the following trivial angle comparison code:

import math
heading = get_compass_value() # angle in radians normalized to $[0, 2*pi)$
if target - 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, utterly wrong (consider what happens when target is 0), yet this could easily be overlooked while writing and during code review.

With anglr, there is a better way:

import math
from anglr import Angle
heading = Angle(get_compass_value())
if heading.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.

Examples

Angle creation:

from math import pi
from anglr import Angle
print(Angle())
print(Angle(87 * pi / 2))
print(Angle(pi / 2, "radians"))
print(Angle(Angle(pi / 2, "radians"))) # same as above
print(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-axis

Angle conversion:

from anglr import Angle
x = 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 / 2
print(x.dump())
x.degrees = 64.2
print(x.dump())
x.gradians = 384.9
print(x.dump())
x.hours = 4.5
print(x.dump())
x.arcminutes = 203.8
print(x.dump())
x.arcseconds = 42352.7
print(x.dump())
x.vector = (56, 32)
print(x.dump())

Angle arithmetic:

from math import pi
from anglr import Angle
print(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 above
print(Angle(-870.3, "gradians").normalized(0, 2 * pi)) # same as above
print(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 run python3 tests.py in the project directory.

Installing

The easiest way to install this is using pip3 install anglr.

Otherwise, download the source distribution from PyPI, and extract the archive.

In the folder, run python3 setup.py install.

Requirements

This library requires Python 3.2 or higher to run.

Authors

Uberi <azhang9@gmail.com> (Anthony Zhang)

Please report bugs and suggestions at the issue tracker!

License

Copyright 2014-2015 Anthony Zhang (Uberi).

The source code is available online at GitHub.

This program is made available under the 3-clause BSD license. See LICENSE.txt for more information.

Release files for anglr 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for anglr 1.1.0
File Size Uploaded
anglr-1.1.0.tar.gz 6.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for anglr 1.1.0
File Interpreter ABI Platform
anglr-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.3 kB

Release files / anglr-1.1.0.tar.gz

Download URL anglr-1.1.0.tar.gz
Size 6.4 kB
Tags Source
SHA-256 checksum
How to use checksums
53d6df951e6ab63263c2baa2bf6570c70be11faa92c93cfac30ee9f003a093c5
BLAKE2b-256 checksum
How to use checksums
ced546446e2cff86e14c60cf2838a3178a453687ba1f8fd1987e64197354354d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / anglr-1.1.0-py3-none-any.whl

Download URL anglr-1.1.0-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc51780ad80515c8b3363f385594cbf260328c91ad534673a9bc2b1f18782b40
BLAKE2b-256 checksum
How to use checksums
6e374a465512ad2d271a6f3cd0b3a293e565485effdac415162a751dbd593dd3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page