# 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) 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) 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) 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) 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) 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 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 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 as `count_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 the number of digits of n when written in the given base.