campy.graphics.gmath module¶
Utility functions for working with 2D geometry degrees, vectors, and constants.
Most Python libraries (such as the math
module) expect angles to be specified
in radians. While this is a good convention, new students may have trouble using
radians, so this module provides degree-accepting variants of the standard trig
functions, as well as a utility to convert between radians and degrees.
Students often also represent 2D vectors by their components, so we also provide conversions to vector magnitude and vector angle.
The mathematical constants PI
and E
are also exported so that students
don’t have to import the separate math module for those constants.
With all of these functions, the numerical precision is only as accurate as that
provided by the underlying math
module.
-
campy.graphics.gmath.
PI
= 3.141592653589793¶ The mathematical constant e, equal to the base of the natural logarithm.
-
campy.graphics.gmath.
to_degrees
(radians)[source]¶ Convert an angle from radians to degrees.
Usage:
print(to_degrees(PI)) # => 180.0 print(to_degrees(PI / 2)) # => 90.0
There is no restriction of the domain of this function, but that also means that the codomain is unrestricted. As a concrete example:
print(to_degrees(-PI)) # => -180.0 print(to_degrees(4 * PI)) # => 720.0
Parameters: radians – An angle (in radians) Returns: The same angle (in degrees)
-
campy.graphics.gmath.
to_radians
(degrees)[source]¶ Convert an angle from degrees to radians.
Usage:
print(to_radians(180.0)) # => 3.141592653589793 print(to_radians(90.0)) # => 1.5707963267948966
There is no restriction of the domain of this function, but that also means that the codomain is unrestricted. As a concrete example:
print(to_radians(-180.0)) # => -3.141592653589793 print(to_radians(720)) # => 12.566370614359172
Parameters: degrees – An angle (in degrees) Returns: The same angle (in radians)
-
campy.graphics.gmath.
sin_degrees
(angle)[source]¶ Return the trigonometric sine of an angle (in degrees).
Usage:
print(sin_degrees(30)) # => 0.49999999999999994 print(sin_degrees(0)) # => 0.0 print(sin_degrees(45.0)) # => 0.7071067811865475
Parameters: angle – An angle (in degrees) Returns: The sine of the given angle
-
campy.graphics.gmath.
cos_degrees
(angle)[source]¶ Return the trigonometric cosine of an angle (in degrees).
Usage:
print(cos_degrees(60)) # => 0.5000000000000001 print(cos_degrees(90)) # => 6.123233995736766e-17 print(cos_degrees(45.0)) # => 0.7071067811865476
Parameters: angle – An angle (in degrees) Returns: The cosine of the given angle
-
campy.graphics.gmath.
tan_degrees
(angle)[source]¶ Return the trigonometric tangent of an angle (in degrees).
Usage:
print(tan_degrees(0)) # => 0.0 print(tan_degrees(90)) # => 1.633123935319537e+16 print(tan_degrees(45.0)) # => 0.9999999999999999
Parameters: angle – An angle (in degrees) Returns: The tangent of the given angle
-
campy.graphics.gmath.
vector_magnitude
(x, y)[source]¶ Compute the magnitude of a vector given by two components.
To compute the magnitude of vector with two components:
print(vector_magnitude(3, 4)) # => 5.0
To compute the magnitude of a
GPoint
:pt = GPoint(3, 4) print(vector_magnitude(*pt)) # => 5.0
Parameters: - x – x-coordinate of vector
- y – y-coordinate of vector
Returns: magnitude of the vector (x, y)
-
campy.graphics.gmath.
vector_angle
(x, y)[source]¶ Return the angle (in degrees) from the origin to the given point.
The angle is measured counterclockwise from the positive x-axis, as is standard.
This function accounts for the fact that, in our graphical coordinate system, the y-axis is flipped (with respect to the traditional Cartesian plane). That is, in the graphical coordinate system, the y-coordinate of a point increases as that point descends on the screen.
Usage:
print(vector_angle(3, 3)) # => -45.0 print(vector_angle(3, 3 * math.sqrt(3))) # => -60.00000000000001 print(vector_angle(3 * math.sqrt(3), 3)) # => -29.999999999999996
The returned angles in these examples are negative because the y-coordinate represents a point in the fourth quadrant.
Parameters: - x – x-coordinate of point
- y – y-coordinate of point
Returns: angle (in degrees) from (0, 0) to (x, -y)
-
campy.graphics.gmath.
count_digits
(n, base=10)[source]¶ Count the number of digits in a number in some base.
Any non-integral part of the number is discarded:
count_digits(3.1415)
is the same ascount_digits(3)
.The provided n must be finite and the provided base must be a positive integer, otherwise an error is raised.
Usage:
count_digits(4) # => 1 count_digits(41) # => 2 count_digits(413) # => 3 count_digits(9.9) # => 1 count_digits(10.1) # => 2 count_digits(-15) # => 2 count_digits(-314.15) # => 3 count_digits(3, base=2) # => 2 count_digits(4, base=2) # => 3 count_digits(8, base=3) # => 2 count_digits(41, base=5) # => 3
Invalid Usage:
count_digits(float('inf')) # raises error count_digits(5, base=-3) # raises error count_digits(5, base=2.2) # raises error
Parameters: - n – number whose digits to count
- base – base system to use
Returns: the number of digits of n when written in the given base.