# README
unum
Go programming helpers for common maths needs; plus vectors, matrices and quaternions.
Usage
const (
Deg2Rad = math.Pi / 180
Rad2Deg = 180 / math.Pi
)
var (
Infinity = math.Inf(1)
NegativeInfinity = math.Inf(-1)
Epsilon = math.Nextafter(1, Infinity) - 1
EpsilonEqFloat = 1.121039E-44
EpsilonEqFloatFactor = 1E-06
EpsilonEqVec = 9.99999944E-11
)
func Clamp
func Clamp(val, c0, c1 float64) float64
Clamps val
between c0
and c1
.
func Clamp01
func Clamp01(v float64) float64
Clamps v
between 0 and 1.
func ClosestPowerOfTwo
func ClosestPowerOfTwo(v uint32) uint32
Returns v
if it is a power-of-two, or else the closest power-of-two.
func DegToRad
func DegToRad(degrees float64) float64
Converts the specified degrees
to radians.
func DeltaAngle
func DeltaAngle(cur, target float64) float64
Calculates the shortest difference between two given angles.
func Eq
func Eq(a, b float64) (eq bool)
Compares two floating point values if they are approximately equivalent.
func InvLerp
func InvLerp(from, to, val float64) float64
Calculates the Lerp parameter between of two values.
func IsPowerOfTwo
func IsPowerOfTwo(x uint32) bool
Returns whether x
is a power-of-two.
func Lerp
func Lerp(a, b, t float64) float64
Returns a
if t
is 0, or b
if t
is 1, or else the linear interpolation
from a
to b
according to t
.
func LerpAngle
func LerpAngle(a, b, t float64) float64
Same as Lerp but makes sure the values interpolate correctly when they wrap around 360 degrees.
func Mat3Identities
func Mat3Identities(mats ...*Mat3)
Calls the Identity
method on all specified mats
.
func Mat4Identities
func Mat4Identities(mats ...*Mat4)
Calls the Identity
method on all specified mats
.
func NextPowerOfTwo
func NextPowerOfTwo(v uint32) uint32
Returns v
if it is a power-of-two, or else the next-highest power-of-two.
func Percent
func Percent(p, of float64) float64
func PingPong
func PingPong(t, l float64) float64
Ping-pongs the value t
, so that it is never larger than l
and never smaller
than 0.
func RadToDeg
func RadToDeg(radians float64) float64
Converts the specified radians
to degrees.
func Round
func Round(v float64) (fint float64)
Returns the next-higher integer if fraction>0.5; if fraction<0.5 returns the next-lower integer; if fraction==0.5, returns the next even integer.
func Sign
func Sign(v float64) (sign float64)
Returns -1 if v
is negative, 1 if v
is positive, or 0 if v
is zero.
func SmoothStep
func SmoothStep(from, to, t float64) float64
Interpolates between from
and to
with smoothing at the limits.
func SmootherStep
func SmootherStep(from, to, t float64) float64
Interpolates between from
and to
with smoother smoothing at the limits.
func SumFrom1To
func SumFrom1To(to int) int
http://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/
func SumFromTo
func SumFromTo(from, to int) int
http://betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/
type Mat3
type Mat3 [9]float64
Represents a 3x3 matrix.
var (
// The 3x3 identity matrix.
Mat3Identity Mat3
)
func NewMat3Identity
func NewMat3Identity() (mat *Mat3)
Returns a new 3x3 identity matrix.
func (*Mat3) Identity
func (me *Mat3) Identity()
Sets this 3x3 matrix to Mat3Identity
.
func (*Mat3) Transpose
func (me *Mat3) Transpose()
Transposes this 3x3 matrix.
type Mat4
type Mat4 [16]float64
Represents a 4x4 column-major matrix.
var (
// The 4x4 identity matrix.
Mat4Identity Mat4
)
func NewMat4Add
func NewMat4Add(a, b *Mat4) (mat *Mat4)
Returns a new *Mat4
representing the result of adding a
to b
.
func NewMat4Frustum
func NewMat4Frustum(left, right, bottom, top, near, far float64) (mat *Mat4)
Returns a new *Mat4
representing the specified frustum.
func NewMat4Identity
func NewMat4Identity() (mat *Mat4)
Returns a new *Mat4
representing the identity matrix.
func NewMat4Lookat
func NewMat4Lookat(eyePos, lookTarget, upVec *Vec3) (mat *Mat4)
Returns a new *Mat4
representing the "look-at matrix" computed from the
specified vectors.
func NewMat4Mult1
func NewMat4Mult1(m *Mat4, v float64) (mat *Mat4)
Returns a new *Mat4
representing the result of multiplying all values in m
with v
.
func NewMat4Mult4
func NewMat4Mult4(one, two *Mat4) (mat *Mat4)
Returns a new *Mat4
that represents the result of multiplying one
with
two
.
func NewMat4MultN
func NewMat4MultN(mats ...*Mat4) (mat *Mat4)
Returns a new *Mat4
that represents the result of multiplying all specified
mats
with one another.
func NewMat4Orient
func NewMat4Orient(lookTarget, worldUp *Vec3) (mat *Mat4)
Returns a new *Mat4
representing the "orientation matrix" computed from the
specified vectors.
func NewMat4Perspective
func NewMat4Perspective(fovY, aspect, near, far float64) (mat *Mat4)
Returns a new *Mat4
that represents the specified perspective-projection
matrix.
func NewMat4RotationX
func NewMat4RotationX(rad float64) (mat *Mat4)
Returns a new *Mat4
that represents a rotation of rad
radians around the X
axis.
func NewMat4RotationY
func NewMat4RotationY(rad float64) (mat *Mat4)
Returns a new *Mat4
that represents a rotation of rad
radians around the Y
axis.
func NewMat4RotationZ
func NewMat4RotationZ(rad float64) (mat *Mat4)
Returns a new *Mat4
that represents a rotation of rad
radians around the Z
axis.
func NewMat4Scaling
func NewMat4Scaling(vec *Vec3) (mat *Mat4)
Returns a new *Mat4
that represents a transformation of "scale by vec
".
func NewMat4Sub
func NewMat4Sub(a, b *Mat4) (mat *Mat4)
Returns a new *Mat4
that represents a
minus b
.
func NewMat4Translation
func NewMat4Translation(vec *Vec3) (mat *Mat4)
Returns a new *Mat4
that represents a transformation of "translate by vec
".
func (*Mat4) Abs
func (me *Mat4) Abs() (abs *Mat4)
Returns a new *Mat4
with each cell representing the math.Abs
value of the
respective corresponding cell in me
.
func (*Mat4) Add
func (me *Mat4) Add(mat *Mat4)
Adds mat
to me
.
func (*Mat4) Clear
func (me *Mat4) Clear()
Zeroes all cells in me
.
func (*Mat4) Clone
func (me *Mat4) Clone() (mat *Mat4)
Returns a new *Mat
containing a copy of me
.
func (*Mat4) CopyFrom
func (me *Mat4) CopyFrom(mat *Mat4)
Copies all cells from mat
to me
.
func (*Mat4) CopyTo
func (me *Mat4) CopyTo(mat *Mat4)
Copies all cells from me
to mat
.
func (*Mat4) Frustum
func (me *Mat4) Frustum(left, right, bottom, top, near, far float64)
Sets me
to represent the specified frustum.
func (*Mat4) Identity
func (me *Mat4) Identity()
Copies all cells from Mat4Identity
to me
.
func (*Mat4) Lookat
func (me *Mat4) Lookat(eyePos, lookTarget, upVec *Vec3)
Sets me
to the "look-at matrix" computed from the specified vectors.
func (*Mat4) Mult1
func (me *Mat4) Mult1(v float64)
Multiplies all cells in me
with v
.
func (*Mat4) Orient
func (me *Mat4) Orient(lookTarget, worldUp *Vec3)
Sets me
to the "orientation matrix" computed from the specified vectors.
func (*Mat4) Perspective
func (me *Mat4) Perspective(fovYDeg, a, n, f float64) (fovYRadHalf float64)
Sets me
to the specified perspective-projection matrix.
fovYRad
-- vertical field-of-view angle in radians. a
-- aspect ratio. n
-- near-plane. f
-- far-plane.
func (*Mat4) RotationX
func (me *Mat4) RotationX(rad float64)
Sets me
to a rotation matrix representing "rotate rad
radians around the X
axis".
func (*Mat4) RotationY
func (me *Mat4) RotationY(rad float64)
Sets me
to a rotation matrix representing "rotate rad
radians around the Y
axis".
func (*Mat4) RotationZ
func (me *Mat4) RotationZ(rad float64)
Sets me
to a rotation matrix representing "rotate rad
radians around the Z
axis".
func (*Mat4) Scaling
func (me *Mat4) Scaling(vec *Vec3)
Sets me
to a transformation matrix representing "scale by vec
"
func (*Mat4) SetFromMult4
func (me *Mat4) SetFromMult4(one, two *Mat4)
Sets me
to the result of multiplying one
times two
.
func (*Mat4) SetFromMultN
func (me *Mat4) SetFromMultN(mats ...*Mat4)
Sets me
to the result of multiplying all the specified mats
with one
another.
func (*Mat4) SetFromTransposeOf
func (me *Mat4) SetFromTransposeOf(mat *Mat4)
Sets me
to the transpose of mat
.
func (*Mat4) Sub
func (me *Mat4) Sub(mat *Mat4)
Subtracts mat
from me
.
func (*Mat4) Translation
func (me *Mat4) Translation(vec *Vec3)
Sets me
to a transformation matrix representing "translate by vec
"
func (*Mat4) Transposed
func (me *Mat4) Transposed() (mat *Mat4)
Returns the transpose of me
.
type Quat
type Quat struct {
// X, Y, Z, W
Vec4
}
Quaternion
func NewQuat
func NewQuat(x, y, z, w float64) *Quat
func Quat_Identity
func Quat_Identity() (q Quat)
func (*Quat) AngleDeg
func (me *Quat) AngleDeg(q *Quat) float64
func (*Quat) AngleRad
func (me *Quat) AngleRad(q *Quat) float64
func (*Quat) Eq
func (me *Quat) Eq(vec *Vec4) bool
func (*Quat) Mul
func (me *Quat) Mul(q *Quat) *Quat
func (*Quat) MulVec3
func (me *Quat) MulVec3(p *Vec3) *Vec3
type Vec2
type Vec2 struct{ X, Y float64 }
A 2-dimensional vector.
func Vec2_Lerp
func Vec2_Lerp(from, to *Vec2, t float64) *Vec2
func Vec2_Max
func Vec2_Max(l, r *Vec2) *Vec2
func Vec2_Min
func Vec2_Min(l, r *Vec2) *Vec2
func Vec2_One
func Vec2_One() Vec2
Vec2{1, 1}
func Vec2_Right
func Vec2_Right() Vec2
Vec2{1, 0}
func Vec2_Up
func Vec2_Up() Vec2
Vec2{0, 1}
func Vec2_Zero
func Vec2_Zero() Vec2
Vec2{0, 0}
func (*Vec2) Add
func (me *Vec2) Add(vec *Vec2)
func (*Vec2) AddedDiv
func (me *Vec2) AddedDiv(a *Vec2, d float64) *Vec2
func (*Vec2) AngleDeg
func (me *Vec2) AngleDeg(to *Vec2) float64
func (*Vec2) AngleRad
func (me *Vec2) AngleRad(to *Vec2) float64
func (*Vec2) ClampMagnitude
func (me *Vec2) ClampMagnitude(maxLength float64) *Vec2
func (*Vec2) Clear
func (me *Vec2) Clear()
func (*Vec2) Distance
func (me *Vec2) Distance(vec *Vec2) float64
func (*Vec2) Div
func (me *Vec2) Div(vec *Vec2) *Vec2
Returns a new *Vec2
that is the result of dividing me
by vec
without
checking for division-by-0.
func (*Vec2) DivSafe
func (me *Vec2) DivSafe(vec *Vec2) *Vec2
Returns a new *Vec2
that is the result of dividing me
by vec
, safely
checking for division-by-0.
func (*Vec2) Divide
func (me *Vec2) Divide(d float64)
func (*Vec2) Divided
func (me *Vec2) Divided(d float64) *Vec2
func (*Vec2) Dot
func (me *Vec2) Dot(vec *Vec2) float64
Returns the dot product of me
and vec
.
func (*Vec2) Eq
func (me *Vec2) Eq(vec *Vec2) bool
func (*Vec2) Length
func (me *Vec2) Length() float64
Returns the 2D vector length of me
.
func (*Vec2) Magnitude
func (me *Vec2) Magnitude() float64
Returns the 2D vector magnitude of me
.
func (*Vec2) MoveTowards
func (me *Vec2) MoveTowards(target *Vec2, maxDistanceDelta float64) *Vec2
func (*Vec2) Mult
func (me *Vec2) Mult(vec *Vec2) *Vec2
Returns a new *Vec2
that is the result of multiplying me
with vec
.
func (*Vec2) Negate
func (me *Vec2) Negate() *Vec2
func (*Vec2) Normalize
func (me *Vec2) Normalize()
Normalizes me
in-place without checking for division-by-0.
func (*Vec2) NormalizeSafe
func (me *Vec2) NormalizeSafe()
Normalizes me
in-place, safely checking for division-by-0.
func (*Vec2) Normalized
func (me *Vec2) Normalized() *Vec2
Returns a new *Vec2
that is the normalized representation of me
without
checking for division-by-0.
func (*Vec2) NormalizedSafe
func (me *Vec2) NormalizedSafe() *Vec2
Returns a new *Vec2
that is the normalized representation of me
, safely
checking for division-by-0.
func (*Vec2) NormalizedScaled
func (me *Vec2) NormalizedScaled(factor float64) *Vec2
Returns a new *Vec2
that is the normalized representation of me
scaled by
factor
without checking for division-by-0.
func (*Vec2) NormalizedScaledSafe
func (me *Vec2) NormalizedScaledSafe(factor float64) *Vec2
Returns a new *Vec2
that is the normalized representation of me
scaled by
factor
, safely checking for division-by-0.
func (*Vec2) Scale
func (me *Vec2) Scale(factor float64)
Multiplies all components in me
with factor
.
func (*Vec2) Scaled
func (me *Vec2) Scaled(factor float64) *Vec2
Returns a new *Vec2
that represents me
scaled by factor
.
func (*Vec2) Set
func (me *Vec2) Set(x, y float64)
func (*Vec2) String
func (me *Vec2) String() string
Returns a human-readable (imprecise) string
representation of me
.
func (*Vec2) Sub
func (me *Vec2) Sub(vec *Vec2) *Vec2
Returns a new *Vec2
that represents me
minus vec
.
func (*Vec2) Subtract
func (me *Vec2) Subtract(vec *Vec2)
Subtracts vec
from me
.
type Vec3
type Vec3 struct {
X, Y, Z float64
}
Represents a 3-dimensional vector.
func Vec3_Back
func Vec3_Back() Vec3
func Vec3_Down
func Vec3_Down() Vec3
func Vec3_Fwd
func Vec3_Fwd() Vec3
func Vec3_Left
func Vec3_Left() Vec3
func Vec3_Lerp
func Vec3_Lerp(from, to *Vec3, t float64) *Vec3
func Vec3_Max
func Vec3_Max(l, r *Vec3) *Vec3
func Vec3_Min
func Vec3_Min(l, r *Vec3) *Vec3
func Vec3_One
func Vec3_One() Vec3
func Vec3_Right
func Vec3_Right() Vec3
func Vec3_Up
func Vec3_Up() Vec3
func Vec3_Zero
func Vec3_Zero() Vec3
func (*Vec3) Add
func (me *Vec3) Add(vec *Vec3)
Adds vec
to me
in-place.
func (*Vec3) Add1
func (me *Vec3) Add1(val float64)
Adds val
to all 3 components of me
.
func (*Vec3) Add3
func (me *Vec3) Add3(x, y, z float64)
Adds the specified 3 components to the respective components in me
.
func (*Vec3) Added
func (me *Vec3) Added(vec *Vec3) *Vec3
Returns the sum of me
and vec
.
func (*Vec3) AllEq
func (me *Vec3) AllEq(val float64) bool
Returns whether all 3 components in me
are approximately equivalent to their
respective counterparts in val
.
func (*Vec3) AllGEq
func (me *Vec3) AllGEq(vec *Vec3) bool
Returns whether all 3 components in me
are greater than (or approximately
equivalent to) their respective component counterparts in vec
.
func (*Vec3) AllIn
func (me *Vec3) AllIn(min, max *Vec3) bool
Returns whether all 3 components in me
are greater than min
, and also less
than max
.
func (*Vec3) AllLEq
func (me *Vec3) AllLEq(vec *Vec3) bool
Returns whether all 3 components in me
are less than (or approximately
equivalent to) their respective component counterparts in vec
.
func (*Vec3) AngleDeg
func (me *Vec3) AngleDeg(to *Vec3) float64
func (*Vec3) AngleRad
func (me *Vec3) AngleRad(to *Vec3) float64
func (*Vec3) Clamp
func (me *Vec3) Clamp(min, max *Vec3)
Clamps each component in me
between the respective corresponding counter-part
component in min
and max
.
func (*Vec3) Clamp01
func (me *Vec3) Clamp01()
Clamps each component in me
between 0 and 1.
func (*Vec3) ClampMagnitude
func (me *Vec3) ClampMagnitude(maxLength float64) *Vec3
func (*Vec3) Clear
func (me *Vec3) Clear()
Zeroes all 3 components in me
.
func (*Vec3) Cross
func (me *Vec3) Cross(vec *Vec3) *Vec3
Returns a new *Vec3
that represents the cross-product of me
and vec
.
func (*Vec3) CrossNormalized
func (me *Vec3) CrossNormalized(vec *Vec3) (r *Vec3)
Returns a new *Vec
that represents the cross-product of me
and vec
,
normalized.
func (*Vec3) Distance
func (me *Vec3) Distance(vec *Vec3) float64
Returns the distance of me
from vec
.
func (*Vec3) DistanceManhattan
func (me *Vec3) DistanceManhattan(vec *Vec3) float64
Returns the "manhattan distance" of me
from vec
.
func (*Vec3) Div
func (me *Vec3) Div(vec *Vec3) *Vec3
Returns a new *Vec3
that represents me
divided by vec
.
func (*Vec3) Divide
func (me *Vec3) Divide(d float64)
func (*Vec3) Divided
func (me *Vec3) Divided(d float64) *Vec3
Returns a new *Vec3
that represents all 3 components in me
, each divided by
val
.
func (*Vec3) Dot
func (me *Vec3) Dot(vec *Vec3) float64
Returns the dot-product of me
and vec
.
func (*Vec3) DotSub
func (me *Vec3) DotSub(vec1, vec2 *Vec3) float64
Returns the dot-product of me
and (vec1
minus vec2
).
func (*Vec3) Eq
func (me *Vec3) Eq(vec *Vec3) bool
func (*Vec3) Length
func (me *Vec3) Length() float64
Returns the 3D vector length of me
.
func (*Vec3) Magnitude
func (me *Vec3) Magnitude() float64
Returns the 3D vector magnitude of me
.
func (*Vec3) Max
func (me *Vec3) Max() float64
Returns the largest of the 3 components in me
.
func (*Vec3) MaxAbs
func (me *Vec3) MaxAbs() float64
Returns the math.Max
of the math.Abs
values of all 3 components in me
.
func (*Vec3) Min
func (me *Vec3) Min() float64
Returns the smallest of the 3 components in me
.
func (*Vec3) Mult
func (me *Vec3) Mult(vec *Vec3) *Vec3
Returns a new *Vec3
that represents me
multiplied with vec
.
func (*Vec3) Mult3
func (me *Vec3) Mult3(x, y, z float64) *Vec3
Returns a new *Vec3
with each component in me
multiplied by the respective
corresponding specified factor.
func (*Vec3) Negate
func (me *Vec3) Negate()
Reverses the signs of all 3 vector components in me
.
func (*Vec3) Negated
func (me *Vec3) Negated() *Vec3
Returns a new *Vec
with each component representing the negative (sign
inverted) corresponding component in me
.
func (*Vec3) Normalize
func (me *Vec3) Normalize()
Normalizes me
in-place without checking for division-by-0.
func (*Vec3) NormalizeSafe
func (me *Vec3) NormalizeSafe()
Normalizes me
in-place, safely checking for division-by-0.
func (*Vec3) Normalized
func (me *Vec3) Normalized() *Vec3
Returns a new *Vec3
that represents me
, normalized.
func (*Vec3) NormalizedScaled
func (me *Vec3) NormalizedScaled(factor float64) (vec *Vec3)
Returns a new *Vec3
that represents me
normalized, then scaled by factor
.
func (*Vec3) Rcp
func (me *Vec3) Rcp() *Vec3
Returns a new *Vec3
representing 1/me
.
func (*Vec3) RotateDeg
func (me *Vec3) RotateDeg(angleDeg float64, axis *Vec3)
Rotates me
angleDeg
degrees around the specified axis
.
func (*Vec3) RotateRad
func (me *Vec3) RotateRad(angleRad float64, axis *Vec3)
Rotates me
angleRad
radians around the specified axis
.
func (*Vec3) Scale
func (me *Vec3) Scale(factor float64)
Scales me
by factor
.
func (*Vec3) ScaleAdd
func (me *Vec3) ScaleAdd(factor, add *Vec3)
Scales me
by factor
, then adds add
.
func (*Vec3) Scaled
func (me *Vec3) Scaled(factor float64) *Vec3
Returns a new *Vec3
that represents me
scaled by factor
.
func (*Vec3) ScaledAdded
func (me *Vec3) ScaledAdded(factor float64, add *Vec3) *Vec3
Returns a new *Vec3
that represents me
scaled by factor
, then add
added.
func (*Vec3) Set
func (me *Vec3) Set(x, y, z float64)
Sets all 3 vector components in me
to the corresponding respective specified
value.
func (*Vec3) SetFromAdd
func (me *Vec3) SetFromAdd(vec1, vec2 *Vec3)
Sets me
to the result of adding vec1
and vec2
.
func (*Vec3) SetFromAddAdd
func (me *Vec3) SetFromAddAdd(a, b, c *Vec3)
me = a + b + c
func (*Vec3) SetFromAddScaled
func (me *Vec3) SetFromAddScaled(vec1, vec2 *Vec3, mul float64)
me = mul * vec2 + vec1
func (*Vec3) SetFromAddSub
func (me *Vec3) SetFromAddSub(a, b, c *Vec3)
me = a + b - c
func (*Vec3) SetFromCross
func (me *Vec3) SetFromCross(vec *Vec3)
Sets me
to the cross-product of me
and vec
.
func (*Vec3) SetFromCrossOf
func (me *Vec3) SetFromCrossOf(one, two *Vec3)
Sets me
to the cross-product of one
and two
.
func (*Vec3) SetFromDegToRad
func (me *Vec3) SetFromDegToRad(deg *Vec3)
Sets each vector component in me
to the radian equivalent of the degree angle
stored in the respective corresponding component of vec
.
func (*Vec3) SetFromDivided
func (me *Vec3) SetFromDivided(vec *Vec3, d float64)
func (*Vec3) SetFromMad
func (me *Vec3) SetFromMad(mul1, mul2, add *Vec3)
me = mul1 * mul2 + add
func (*Vec3) SetFromMult
func (me *Vec3) SetFromMult(v1, v2 *Vec3)
me = v1 * v2
func (*Vec3) SetFromNegated
func (me *Vec3) SetFromNegated(vec *Vec3)
me = -vec
func (*Vec3) SetFromNormalized
func (me *Vec3) SetFromNormalized(vec *Vec3)
Sets me
to vec
normalized.
func (*Vec3) SetFromRcp
func (me *Vec3) SetFromRcp(vec *Vec3)
Sets me
to the inverse of vec
.
func (*Vec3) SetFromRotation
func (me *Vec3) SetFromRotation(pos, rotCos, rotSin *Vec3)
Sets me
to pos
rotated as expressed in rotCos
and rotSin
.
func (*Vec3) SetFromScaled
func (me *Vec3) SetFromScaled(vec *Vec3, mul float64)
me = vec * mul
func (*Vec3) SetFromScaledSub
func (me *Vec3) SetFromScaledSub(vec1, vec2 *Vec3, mul float64)
me = (vec1 - vec2) * mul
func (*Vec3) SetFromSub
func (me *Vec3) SetFromSub(vec1, vec2 *Vec3)
me = vec1 - vec2
.
func (*Vec3) SetFromSubAdd
func (me *Vec3) SetFromSubAdd(a, b, c *Vec3)
me = a - b + c
func (*Vec3) SetFromSubMult
func (me *Vec3) SetFromSubMult(sub1, sub2, mul *Vec3)
me = (sub1 - sub2) * mul
func (*Vec3) SetFromSubScaled
func (me *Vec3) SetFromSubScaled(v1, v2 *Vec3, v2Scale float64)
me = v1 - v2 * v2Scale
func (*Vec3) SetFromSubSub
func (me *Vec3) SetFromSubSub(a, b, c *Vec3)
me = a - b - c
func (*Vec3) SetToMax
func (me *Vec3) SetToMax()
Sets all 3 vector components in me
to math.MaxFloat64
.
func (*Vec3) SetToMin
func (me *Vec3) SetToMin()
Sets all 3 vector components in me
to -math.MaxFloat64
.
func (*Vec3) Sign
func (me *Vec3) Sign() *Vec3
Returns a new *Vec3
with each vector component indicating the sign (-1, 1 or
0) of the respective corresponding component in me
.
func (*Vec3) String
func (me *Vec3) String() string
Returns a human-readable (imprecise) string
representation of me
.
func (*Vec3) Sub
func (me *Vec3) Sub(vec *Vec3) *Vec3
Returns a new *Vec3
that represents me
minus vec
.
func (*Vec3) SubDivMult
func (me *Vec3) SubDivMult(sub, div, mul *Vec3) *Vec3
Returns a new *Vec3
that represents ((me - sub) / div) * mul
.
func (*Vec3) SubFloorDivMult
func (me *Vec3) SubFloorDivMult(div, mul float64) *Vec3
Returns a new *Vec3
that represents mul * math.Floor(me / div)
.
func (*Vec3) SubFrom
func (me *Vec3) SubFrom(val float64) *Vec3
Returns a new *Vec3
that represents val
minus me
.
func (*Vec3) SubScaled
func (me *Vec3) SubScaled(vec *Vec3, val float64) *Vec3
Returns a new *Vec3
that represents (me - vec) * val
.
func (*Vec3) Subtract
func (me *Vec3) Subtract(vec *Vec3)
Subtracts vec
from me
.
func (*Vec3) TransformCoord
func (me *Vec3) TransformCoord(mat *Mat4)
Transform coordinate vector me
according to the specified *Mat4
.
func (*Vec3) TransformNormal
func (me *Vec3) TransformNormal(mat *Mat4, absMat bool)
Transform normal vector me
according to the specified *Mat4
.
type Vec4
type Vec4 struct {
X, Y, Z, W float64
}
Represents an arbitrary 4-dimensional vector.
func Vec4_Lerp
func Vec4_Lerp(from, to *Vec4, t float64) *Vec4
func Vec4_Max
func Vec4_Max(l, r *Vec4) *Vec4
func Vec4_Min
func Vec4_Min(l, r *Vec4) *Vec4
func Vec4_One
func Vec4_One() Vec4
func Vec4_Zero
func Vec4_Zero() Vec4
func (*Vec4) AddedDiv
func (me *Vec4) AddedDiv(a *Vec4, d float64) *Vec4
func (*Vec4) Clear
func (me *Vec4) Clear()
func (*Vec4) Clone
func (me *Vec4) Clone() (q *Vec4)
Returns a new *Vec4
containing a copy of me
.
func (*Vec4) Conjugate
func (me *Vec4) Conjugate()
Negates the X
, Y
, Z
components in me
, but not W
.
func (*Vec4) Conjugated
func (me *Vec4) Conjugated() (v *Vec4)
Returns a new *Vec4
that represents me
conjugated.
func (*Vec4) Distance
func (me *Vec4) Distance(vec *Vec4) float64
func (*Vec4) Divide
func (me *Vec4) Divide(d float64)
func (*Vec4) Divided
func (me *Vec4) Divided(d float64) *Vec4
func (*Vec4) Dot
func (me *Vec4) Dot(vec *Vec4) float64
func (*Vec4) Eq
func (me *Vec4) Eq(vec *Vec4) bool
func (*Vec4) Length
func (me *Vec4) Length() float64
Returns the 4D vector length of me
.
func (*Vec4) Magnitude
func (me *Vec4) Magnitude() float64
Returns the 4D vector magnitude of me
.
func (*Vec4) MoveTowards
func (me *Vec4) MoveTowards(target *Vec4, maxDistanceDelta float64) *Vec4
func (*Vec4) MultMat4
func (me *Vec4) MultMat4(mat *Mat4)
Sets me
to the result of multiplying the specified *Mat4
with me
.
func (*Vec4) MultMat4Vec3
func (me *Vec4) MultMat4Vec3(mat *Mat4, vec *Vec3)
Sets me
to the result of multiplying the specified *Mat4
with the specified
*Vec3
.
func (*Vec4) MultMat4Vec4
func (me *Vec4) MultMat4Vec4(mat *Mat4, vec *Vec4)
Sets me
to the result of multiplying the specified *Mat4
with the specified
*Vec4
.
func (*Vec4) Negate
func (me *Vec4) Negate()
func (*Vec4) Negated
func (me *Vec4) Negated() *Vec4
func (*Vec4) Normalize
func (me *Vec4) Normalize()
Normalizes me
according to me.Magnitude
.
func (*Vec4) NormalizeFrom
func (me *Vec4) NormalizeFrom(magnitude float64)
Normalizes me
according to the specified magnitude
.
func (*Vec4) Normalized
func (me *Vec4) Normalized() *Vec4
Returns a new *Vec4
that represents me
normalized according to
me.Magnitude
.
func (*Vec4) Project
func (me *Vec4) Project(vec *Vec4)
func (*Vec4) Projected
func (me *Vec4) Projected(vec *Vec4) *Vec4
func (*Vec4) Scale
func (me *Vec4) Scale(v float64)
Scales all 4 vector components in me
by factor v
.
func (*Vec4) Scaled
func (me *Vec4) Scaled(v float64) *Vec4
func (*Vec4) SetFromConjugated
func (me *Vec4) SetFromConjugated(c *Vec4)
Sets me
to c
conjugated.
func (*Vec4) SetFromMult
func (me *Vec4) SetFromMult(l, r *Vec4)
Applies various 4D vector component computations of l
and r
to me
, as
needed by the Vec3.RotateRad
method.
func (*Vec4) SetFromMult3
func (me *Vec4) SetFromMult3(q *Vec4, v *Vec3)
Applies various 4D vector component computations of q
and v
to me
, as
needed by the Vec3.RotateRad
method.
func (*Vec4) SetFromVec3
func (me *Vec4) SetFromVec3(vec *Vec3)
func (*Vec4) String
func (me *Vec4) String() string
Returns a human-readable (imprecise) string
representation of me
.
func (*Vec4) Sub
func (me *Vec4) Sub(vec *Vec4) *Vec4
func (*Vec4) Subtract
func (me *Vec4) Subtract(vec *Vec4)