Angle examples¶
Let’s define a small helper function:
def print_me(msg, val):
print("{}: {}".format(msg, val))
Create an Angle object, providing degrees, minutes and seconds:
a = Angle(-23.0, 26.0, 48.999983999)
First we print using the __call__()
method (note the extra parentheses):
print_me("The angle 'a()' is", a())
# The angle 'a()' is: -23.44694444
Second we print using the __str__()
method (no extra parentheses needed):
print_me("The angle 'a' is", a)
# The angle 'a' is: -23.44694444
Use the copy constructor:
b = Angle(a)
print_me("Angle 'b', which is a copy of 'a', is", b)
# Angle 'b', which is a copy of 'a', is: -23.44694444
Use the static deg2dms()
method to carry out conversions:
d, m, s, sign = Angle.deg2dms(23.44694444)
val = "{}d {}' {}''".format(int(sign*d), m, s)
print_me("{Deg}d {Min}' {Sec}''", val)
# {Deg}d {Min}' {Sec}'': 23d 26' 48.999984''
We can print Angle a
directly in sexagesimal format.
In fancy format:
print_me("{Deg}d {Min}' {Sec}''", a.dms_str()) # {Deg}d {Min}' {Sec}'': -23d 26' 48.999983999''
In plain format:
print_me("{Deg}:{Min}:{Sec}", a.dms_str(False)) # {Deg}:{Min}:{Sec}: -23:26:48.999983999
Print directly as a tuple:
a = Angle(23.44694444)
print_me("a.dms_tuple()", a.dms_tuple())
# a.dms_tuple(): (23, 26, 48.999983999997596, 1.0)
print_me("a.ra_tuple()", a.ra_tuple())
# a.ra_tuple(): (1, 33, 47.26666559999941, 1.0)
Redefine Angle a
several times:
a.set(-0.44694444)
print_me(" a.dms_str()", a.dms_str())
# a.dms_str(): -26' 48.999984''
a.set(0, 0, -46.31)
print_me(" a.dms_str(False)", a.dms_str(False))
# a.dms_str(False): 0:0:-46.31
We can use decimals in degrees/minutes. They are converted automatically:
a.set(0, -46.25, 0.0)
print_me(" a.dms_str()", a.dms_str())
# a.dms_str(): -46' 15.0''
a.set(0, 0, 0.0)
print_me(" a.dms_str()", a.dms_str())
# a.dms_str(): 0d 0' 0.0''
We can define the angle as in radians. It will be converted to degrees:
b = Angle(pi, radians=True)
print_me("b = Angle(pi, radians=True); print(b)", b)
# b = Angle(pi, radians=True); print(b): 180.0
And we can easily carry out the degrees to radians conversion:
print_me("print(b.rad())", b.rad())
# print(b.rad()): 3.14159265359
We can also specify the angle as a Right Ascension. Angle can be given as a Right Ascension: Hours, Minutes, Seconds:
a.set_ra(9, 14, 55.8)
print_me(" print(a)", a)
# print(a): 138.7325
b = Angle(9, 14, 55.8, ra=True)
print_me(" print(b)", b)
# print(b): 138.7325
We can print the Angle as Right Ascension, as a float and as string:
a = Angle(138.75)
print_me(" print(a.get_ra())", a.get_ra())
# print(a.get_ra()): 9.25
print_me(" print(a.ra_str())", a.ra_str())
# print(a.ra_str()): 9h 15' 0.0''
print_me(" print(a.ra_str(False))", a.ra_str(False))
# print(a.ra_str(False)): 9:15:0.0
Use the to_positive()
method to get the positive version of an angle:
a = Angle(-87.32)
print_me(" print(a.to_positive())", a.to_positive())
# print(a.to_positive()): 272.68
Call the __repr__()
method to get a string defining the current object. This string can then be fed to the eval()
function to generate the object:
print_me("print(b.__repr__())", b.__repr__())
# print(b.__repr__()): Angle(138.7325)
c = eval(repr(b))
print_me("c = eval(repr(b)); print(c)", c)
# c = eval(repr(b)); print(c): 138.7325
Let’s now work with some useful operators and functions:
print_me("c", c)
# c: 138.7325
Negate an angle:
d = Angle(13, 30) print_me("d", d) # d: 13.5 e = -d print_me(" e = -d", e) # e = -d: -13.5
Get the absolute value of an angle:
e = abs(e) print_me(" e = abs(e)", e) # e = abs(e): 13.5
Module operation on an angle:
d = Angle(17.0) print_me("d", d) # d: 17.0 e = c % d print_me(" e = c % d", e) # e = c % d: 2.7325
Convert the angle to an integer:
d = Angle(13.95) print_me("d", d) # d: 13.95 print_me(" int(d)", int(d)) # int(d): 13 d = Angle(-4.95) print_me("d", d) # d: -4.95 print_me(" int(d)", int(d)) # int(d): -4
Convert the angle to a float:
print_me(" float(d)", float(d)) # float(d): -4.95
Round the angle to a float:
e = Angle(-4.951648) print_me("e", e) # e: -4.951648 print_me(" round(e)", round(e)) # round(e): -5.0 print_me(" round(e, 2)", round(e, 2)) # round(e, 2): -4.95 print_me(" round(e, 3)", round(e, 3)) # round(e, 3): -4.952 print_me(" round(e, 4)", round(e, 4)) # round(e, 4): -4.9516
Comparison operators:
print_me(" d == e", d == e) # d == e: False print_me(" d != e", d != e) # d != e: True print_me(" d > e", d > e) # d > e: True print_me(" c >= 180.0", c >= 180.0) # c >= 180.0: False print_me(" c < 180.0", c < 180.0) # c < 180.0: True print_me(" c <= 180.0", c <= 180.0) # c <= 180.0: True
It is very easy to add Angles to obtain a new Angle:
e = c + d print_me(" c + d", e) # c + d: 133.7825
We can also directly add a decimal angle:
e = c + 11.5 print_me(" c + 11.5", e) # c + 11.5: 150.2325
Types allowed are int, float and Angle:
print('e = c + "32.5"') # e = c + "32.5" try: e = c + "32.5" except TypeError: print("TypeError!: Valid types are int, float, and Angle, not string!") # TypeError!: Valid types are int, float, and Angle, not string!
Subtraction:
e = c - d print_me(" c - d", e) # c - d: 143.6825
Multiplication:
c.set(150.0) d.set(5.0) print_me("c", c) # c: 150.0 print_me("d", d) # d: 5.0 e = c * d print_me(" c * d", e) # c * d: 30.0
Division:
c.set(150.0) d.set(6.0) print_me("d", d) # d: 6.0 e = c / d print_me(" c / d", e) # c / d: 25.0
Division by zero is not allowed:
d.set(0.0) print_me("d", d) # d: 0.0 print('e = c / d') # e = c / d try: e = c / d except ZeroDivisionError: print("ZeroDivisionError!: Division by zero is not allowed!") # ZeroDivisionError!: Division by zero is not allowed!
Power:
d.set(2.2) print_me("d", d) # d: 2.2 e = c ** d print_me(" c ** d", e) # c ** d: 91.5733670999
Accumulative module operation:
d.set(17.0) print_me("d", d) # d: 17.0 e %= d print_me(" e %= d", e) # e %= d: 6.57336709993
Accumulative addition:
c += d print_me(" c += d", c) # c += d: 167.0
Accumulative subtraction:
print_me("b", b) # b: 138.7325 c -= b print_me(" c -= b", c) # c -= b: 28.2675
Accumulative multiplication:
print_me("b", b) # b: 138.7325 c *= b print_me(" c *= b", c) # c *= b: 321.62094375
Accumulative division:
print_me("b", b) # 138.7325 d.set(6.0) print_me("d", d) # d: 6.0 b /= d print_me(" b /= d", b) # b /= d: 23.1220833333
Accumulative power:
d.set(2.2) print_me("d", d) # d: 2.2 c = abs(c) print_me(" c = abs(c)", c) # c = abs(c): 321.62094375 c **= d print_me(" c **= d", c) # c **= d: 254.307104203
The same operations, but by the right side:
e = 3.5 + b
print_me(" e = 3.5 + b", e)
# e = 3.5 + b: 26.6220833333
e = 3.5 - b
print_me(" e = 3.5 - b", e)
# e = 3.5 - b: -19.6220833333
e = 3.5 * b
print_me(" e = 3.5 * b", e)
# e = 3.5 * b: 80.9272916667
e = 3.5 / b
print_me(" e = 3.5 / b", e)
# e = 3.5 / b: 0.151370443119
e = 3.5 ** b
print_me(" e = 3.5 ** b", e)
# e = 3.5 ** b: 260.783691406