View Source Graphmath.Vec2 (graphmath v2.6.0)
This is the 2D mathematics.
This submodule handles vectors stored as tuples of floats ex: {1.0, 2.0}.
Summary
Functions
add( a, b) adds a vec2 (a) to a vec2 (b).
chebyshev_distance(a,b) returns the Chebyshev distance between two points a and b.
create() creates a zero vec2.
create(vec) creates a vec2 from a list of 2 or more floats.
create(x,y) creates a vec2 of value (x,y).
dot( a, b ) finds the dot (inner) product of one vec2 with another vec2.
equal(a, b) checks to see if two vec2s a and b are equivalent.
equal(a, b, eps) checks to see if two vec2s a and b are equivalent within some tolerance.
length(a) finds the length (Eucldiean or L2 norm) of a vec2.
length_manhattan(a) finds the Manhattan (L1 norm) length of a vec2.
length_squared(a) finds the square of the length of a vec2 (a).
lerp(a,b,t) is used to linearly interpolate between two given vectors a and b along an interpolant t.
minkowski_distance(a,b,order) returns the Minkowski distance between two points a and b of order order.
multiply( a, b) mulitplies element-wise a vec2 (a) by a vec2 (b).
near(a,b, distance) checks whether two vec2s are within a certain distance of each other.
negate(v) creates a vector whose elements are opposite in sign to v.
normalize(a) finds the unit vector with the same direction as a vec2.
p_norm(v,order) returns the P-norm of vector v of order order.
perp(a) creates a vector perpendicular to another vector a.
perp_prod( a, b ) finds the perpindicular product of one vec2 with another vec2.
project(a,b) projects one vec2 onto another vec2.
random_box() generates a point on or inside the unit box [0,1]x[0,1].
random_circle() generates a point on the unit circle.
random_disc() generates a point on or inside the unit circle using the method here.
rotate(a,theta) rotates a vec2 CCW about the +Z axis.
scale( a, scale ) uniformly scales a vec2.
subtract(a, b ) subtracts one vec2 from another vec2.
weighted_sum(a, v1, b, v2) returns the sum of vectors v1 and v2 having been scaled by a and b, respectively.
Types
Functions
add( a, b) adds a vec2 (a) to a vec2 (b).
It returns a tuple of the form { ax + bx, ay + by }.
add( a, b ) adds two vec2s.
a is the first vec2.
b is the second vec2.
It returns a vec2 of the form { a<sub>x</sub> + b<sub>x</sub>, a<sub>y</sub> + b<sub>y</sub> }.
chebyshev_distance(a,b) returns the Chebyshev distance between two points a and b.
@spec create() :: vec2()
create() creates a zero vec2.
It will return a tuple of the form {0.0,0.0}.
create() creates a zeroed vec2.
It takes no arguments.
It returns a vec2 of the form { 0.0, 0.0 }.
create(vec) creates a vec2 from a list of 2 or more floats.
vec is a list of 2 or more floats.
It returns a vec2 of the form {x,y}, where x and y are the first three elements in vec.
create(x,y) creates a vec2 of value (x,y).
x is the first element of the vec3 to be created.
y is the second element of the vec3 to be created.
It returns a vec2 of the form {x,y}.
dot( a, b ) finds the dot (inner) product of one vec2 with another vec2.
a is the first vec2.
b is the second vec2.
It returns a float of the value (a<sub>x</sub>b<sub>x</sub> + a<sub>y</sub>b<sub>y</sub> ).
equal(a, b) checks to see if two vec2s a and b are equivalent.
a is the vec2.
b is the vec2.
It returns true if the vectors have equal elements.
Note that due to precision issues, you may want to use equal/3 instead.
equal(a, b, eps) checks to see if two vec2s a and b are equivalent within some tolerance.
a is the vec2.
b is the vec2.
eps is the tolerance, a float.
It returns true if the vectors have equal elements within some tolerance.
length(a) finds the length (Eucldiean or L2 norm) of a vec2.
a is the vec2 to find the length of.
It returns a float of the value (sqrt( a<sub>x</sub><sup>2</sup> + a<sub>y</sub><sup>2</sup>)).
length_manhattan(a) finds the Manhattan (L1 norm) length of a vec2.
a is the vec2 to find the Manhattan length of.
It returns a float of the value (a<sub>x</sub> + a<sub>y</sub>).
The Manhattan length is the sum of the components.
length_squared(a) finds the square of the length of a vec2 (a).
In many cases, this is sufficient for comparisions and avaoids a sqrt.
It returns a float of the value (axax + ayay).
length_squared(a) finds the square of the length of a vec2.
a is the vec2 to find the length squared of.
It returns a float of the value a<sub>x</sub><sup>2</sup> + a<sub>y</sub><sup>2</sup>.
In many cases, this is sufficient for comparisons and avoids a square root.
lerp(a,b,t) is used to linearly interpolate between two given vectors a and b along an interpolant t.
The interpolant t is on the domain [0,1]. Behavior outside of that is undefined.
lerp(a,b,t) linearly interpolates between one vec2 and another vec2 along an interpolant.
a is the starting vec2.
b is the ending vec2.
t is the interpolant float, on the domain [0,1].
It returns a vec2 of the form (1-t)a - (t)b.
The interpolant t is on the domain [0,1]. Behavior outside of that is undefined.
minkowski_distance(a,b,order) returns the Minkowski distance between two points a and b of order order.
Order 1 is equivalent to manhattan distance, 2 to Euclidean distance, otherwise all bets are off.
multiply( a, b) mulitplies element-wise a vec2 (a) by a vec2 (b).
It returns a tuple of the form { ax*bx, ay*by }.
multiply( a, b ) multiplies element-wise a vec2 by another vec2.
a is the vec2 multiplicand.
b is the vec2 multiplier.
It returns a vec2 of the form { a<sub>x</sub>b<sub>x</sub>, a<sub>y</sub>b<sub>y</sub> }.
near(a,b, distance) checks whether two vec2s are within a certain distance of each other.
a is the first vec2.
b is the second vec2.
distance is the distance between them as a float.
negate(v) creates a vector whose elements are opposite in sign to v.
normalize(a) finds the unit vector with the same direction as a vec2.
a is the vec2 to be normalized.
It returns a vec2 of the form {normx, normy}.
This is done by dividing each component by the vector's magnitude.
p_norm(v,order) returns the P-norm of vector v of order order.
order needs to be greater than or equal to 1 to define a metric space.
order 1 is equivalent to manhattan distance, 2 to Euclidean distance, otherwise all bets are off.
perp(a) creates a vector perpendicular to another vector a.
a is the vec2 to be perpindicular to.
This returns a vec2 perpindicular to a, to the right of the original a.
perp_prod( a, b ) finds the perpindicular product of one vec2 with another vec2.
a is the first vec2.
b is the second vec2.
The perpindicular product is the magnitude of the cross-product between the two vectors.
It returns a float of the value (a<sub>x</sub>b<sub>y</sub> - b<sub>x</sub>a<sub>y</sub>).
project(a,b) projects one vec2 onto another vec2.
a is the first vec2.
b is the second vec2.
This returns a vec2 representing the image of a in the direction of b.
@spec random_box() :: vec2()
random_box() generates a point on or inside the unit box [0,1]x[0,1].
@spec random_circle() :: vec2()
random_circle() generates a point on the unit circle.
It returns a vec2 with distance 1 from the origin.
@spec random_disc() :: vec2()
random_disc() generates a point on or inside the unit circle using the method here.
It returns a vec2 with distance 1 from the origin.
rotate(a,theta) rotates a vec2 CCW about the +Z axis.
a is the vec2 to rotate.
theta is the number of radians to rotate by as a float.
This returns a vec2.
scale( a, scale ) uniformly scales a vec2.
a is the vec2 to be scaled.
scale is the float to scale each element of a by.
It returns a tuple of the form { a<sub>x</sub>scale, a<sub>y</sub>scale }.
subtract(a, b ) subtracts one vec2 from another vec2.
a is the vec2 minuend.
b is the vec2 subtrahend.
It returns a vec2 of the form { a<sub>x</sub> - b<sub>x</sub>, a<sub>y</sub> - b<sub>y</sub> }.
(the terminology was found here).
weighted_sum(a, v1, b, v2) returns the sum of vectors v1 and v2 having been scaled by a and b, respectively.