Graphmath.Vec3
This is the 3D mathematics library for graphmath.
This submodule handles 3D vectors using tuples of floats.
Summary
add(a, b) |
|
create() |
|
create(vec) |
|
create(x, y, z) |
|
cross(a, b) |
|
dot(a, b) |
|
length(a) |
|
length_manhattan(a) |
|
length_squared(a) |
|
lerp(a, b, t) |
|
multiply(a, b) |
|
near(a, b, distance) |
|
normalize(a) |
|
rotate(v, k, theta) |
|
scale(a, scale) |
|
subtract(a, b) |
|
Functions
Specs:
add( a, b)
adds two vec3
s.
a
is the first vec3
.
b
is the second vec3
.
It returns a vec3
of the form { ax + bx, ay + by, az + bz }.
Specs:
- create :: vec3
create()
creates a zeroed vec3
.
It takes no arguments.
It returns a vec3
of the form { 0.0, 0.0, 0.0 }
.
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
.
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}
.
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.
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).
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)).
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.
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.
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.
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 }.
Specs:
near(a,b, distance)
checks whether two vec3
s 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.
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.
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))
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 }.