Graphmath.Vec3

This is the 3D mathematics library for graphmath.

This submodule handles 3D vectors using tuples of floats.

Summary

add(a, b)

add( a, b) adds two vec3s

create()

create() creates a zeroed vec3

create(vec)

create(vec) creates a vec3 from a list of 3 or more floats

create(x, y, z)

create(x,y,z) creates a vec3 of value (x,y,z)

cross(a, b)

cross( a, b) finds the cross productof one vec3 with another vec3

dot(a, b)

dot( a, b) finds the dot (inner) product of one vec3 with another vec3

length(a)

length(a) finds the length (Eucldiean or L2 norm) of a vec3

length_manhattan(a)

length_manhattan(a) finds the Manhattan (L1 norm) length of a vec3

length_squared(a)

length_squared(a) finds the square of the length of a vec3

lerp(a, b, t)

lerp(a,b,t) linearly interpolates between one vec3 and another vec3 along an interpolant

multiply(a, b)

multiply( a, b) multiplies element-wise a vec3 by another vec3

near(a, b, distance)

near(a,b, distance) checks whether two vec3s are within a certain distance of each other

normalize(a)

normalize(a) finds the unit vector with the same direction as a vec3

rotate(v, k, theta)

rotate( v, k, theta) rotates a vector (v) about a unit vector (k) by theta radians

scale(a, scale)

scale( a, scale) uniformly scales a vec3

subtract(a, b)

subtract(a, b) subtracts one vec3 from another vec3

Types

vec3 :: {float, float, float}

Functions

add(a, b)

Specs:

add( a, b) adds two vec3s.

a is the first vec3.

b is the second vec3.

It returns a vec3 of the form { ax + bx, ay + by, az + bz }.

create()

Specs:

create() creates a zeroed vec3.

It takes no arguments.

It returns a vec3 of the form { 0.0, 0.0, 0.0 }.

create(vec)

Specs:

  • create([float]) :: vec3

create(vec) creates a vec3 from a list of 3 or more floats.

vec is a list of 3 or more floats.

It returns a vec3 of the form {x,y,z}, where x, y, and z are the first three elements in vec.

create(x, y, z)

Specs:

  • create(float, float, float) :: vec3

create(x,y,z) creates a vec3 of value (x,y,z).

x is the first element of the vec3 to be created.

y is the second element of the vec3 to be created.

z is the third element of the vec3 to be created.

It returns a vec3 of the form {x,y,z}.

cross(a, b)

Specs:

cross( a, b) finds the cross productof one vec3 with another vec3.

a is the first vec3.

b is the second vec3.

It returns a float of the value ( aybz - azby, azbx - axbz, axby - aybx).

The cross product of two vectors is a vector perpendicular to the two source vectors. Its magnitude will be the area of the parallelogram made by the two souce vectors.

dot(a, b)

Specs:

dot( a, b) finds the dot (inner) product of one vec3 with another vec3.

a is the first vec3.

b is the second vec3.

It returns a float of the value (axbx + ayby + azbz).

length(a)

Specs:

  • length(vec3) :: float

length(a) finds the length (Eucldiean or L2 norm) of a vec3.

a is the vec3 to find the length of.

It returns a float of the value (sqrt( ax2 + ay2 + az2)).

length_manhattan(a)

Specs:

  • length_manhattan(vec3) :: float

length_manhattan(a) finds the Manhattan (L1 norm) length of a vec3.

a is the vec3 to find the Manhattan length of.

It returns a float of the value (ax + ay + az).

The Manhattan length is the sum of the components.

length_squared(a)

Specs:

  • length_squared(vec3) :: float

length_squared(a) finds the square of the length of a vec3.

a is the vec3 to find the length squared of.

It returns a float of the value ax2 + ay2 + az2.

In many cases, this is sufficient for comparisons and avoids a square root.

lerp(a, b, t)

Specs:

lerp(a,b,t) linearly interpolates between one vec3 and another vec3 along an interpolant.

a is the starting vec3.

b is the ending vec3.

t is the interpolant float, on the domain [0,1].

It returns a vec3 of the form (1-t)a - (t)b.

The interpolant t is on the domain [0,1]. Behavior outside of that is undefined.

multiply(a, b)

Specs:

multiply( a, b) multiplies element-wise a vec3 by another vec3.

a is the vec3 multiplicand.

b is the vec3 multiplier.

It returns a vec3 of the form { axbx, ayby, azbz }.

near(a, b, distance)

Specs:

near(a,b, distance) checks whether two vec3s are within a certain distance of each other.

a is the first vec3.

b is the second vec3.

distance is the distance between them as a float.

normalize(a)

Specs:

normalize(a) finds the unit vector with the same direction as a vec3.

a is the vec3 to be normalized.

It returns a vec3 of the form {normx, normy, normz}.

This is done by dividing each component by the vector’s magnitude.

rotate(v, k, theta)

Specs:

rotate( v, k, theta) rotates a vector (v) about a unit vector (k) by theta radians.

v is the vec3 to be rotated.

k is the vec3 axis of rotation. It must be of unit length.

theta is the angle in radians to rotate as a float.

This uses the Formula of Rodriguez:

Vrot = Vcos(theta) + (K x V)sin(theta) + K(K dot V)(1-cos(theta))

scale(a, scale)

Specs:

scale( a, scale) uniformly scales a vec3.

a is the vec3 to be scaled.

scale is the float to scale each element of a by.

It returns a tuple of the form { axscale, ayscale, azscale }.

subtract(a, b)

Specs:

subtract(a, b) subtracts one vec3 from another vec3.

a is the vec3 minuend.

b is the vec3 subtrahend.

It returns a vec3 of the form { ax - bx, ay - by, az - bz }.

(the terminology was found here).