Float2
A vector with two floating-point components x
and y
.
Header File
#include <ply-math/Vector.h>
Also included from <ply-math/Base.h>
.
Data Members
Constructors
-
Constructs an uninitialized
Float2
. -
Constructs a
Float2
with both components set tot
.Float2 v = {1}; StdOut::text() << v; // "{1, 1}"
-
Constructs a
Float2
from the given components.Float2 v = {1, 0};
void Float2::operator=(const Float2& arg) &
[code]-
Copy assignment. Declared with an lvalue ref-qualifier so that it's an error to assign to an rvalue.
a.normalized() = b; // error
Float2 operator-(const Float2& a)
[code]-
Unary negation.
Float2 operator+(const Float2& a, const Float2& b)
[code]Float2 operator-(const Float2& a, const Float2& b)
[code]Float2 operator*(const Float2& a, const Float2& b)
[code]Float2 operator/(const Float2& a, const Float2& b)
[code]-
Returns a vector whose components are the result of applying the given operation to the corresponding components of
a
andb
. Each component is acted on independently.StdOut::text() << Float2{2, 3} * Float2{4, 1}; // "{8, 3}"
If you specify a scalar value in place of a
Float2
, it will be promoted to aFloat2
by replicating the value to each component.StdOut::text() << Float2{2, 3} * 2; // "{4, 6}" StdOut::text() << 8 / Float2{2, 4}; // "{4, 2}"
void operator+=(Float2& a, const Float2& b)
[code]void operator-=(Float2& a, const Float2& b)
[code]void operator*=(Float2& a, const Float2& b)
[code]void operator/=(Float2& a, const Float2& b)
[code]-
In-place versions of the above operators.
Float2 v = {2, 3}; v *= {4, 1}; StdOut::text() << v; // "{8, 3}"
bool operator==(const Float2& a, const Float2& b)
[code]bool operator!=(const Float2& a, const Float2& b)
[code]-
Returns
true
if the vectors are equal (or not equal) using floating-point comparison. In particular,Float2{0.f} == Float2{-0.f}
istrue
. -
Returns
true
ifa
is approximately equal tob
. The tolerance is given byepsilon
.Float2 v = {0.9999f, 0.0001f}; StdOut::text() << isNear(v, Float2{1, 0}, 1e-3f); // "true"
Bool2 operator<(const Float2& a, const Float2& b)
[code]Bool2 operator<=(const Float2& a, const Float2& b)
[code]Bool2 operator>(const Float2& a, const Float2& b)
[code]Bool2 operator>=(const Float2& a, const Float2& b)
[code]-
These functions compare each component individually. The result of each comparison is returned in a
Bool2
. Callall()
to check if the result wastrue
for all components, or callany()
to check if the result wastrue
for any component.StdOut::text() << all(Float2{1, 2} > Float2{0, 1}); // "true"
These functions are useful for testing whether a point is inside a box. See the implementation of
Box<>::contains
for an example. -
Returns the dot product of two vectors.
StdOut::text() << dot(Float2{1, 0}, Float2{3, 4}); // "2"
-
Returns the cross product of two vectors.
StdOut::text() << cross(Float2{1, 0}, Float2{3, 4}); // "4"
-
Returns the square of the length of the vector.
-
Returns the length of the vector. Equivalent to
sqrtf(this->length2())
. -
Returns
true
if the squared length of the vector is sufficiently close to 1.0. The threshold is given bythresh
. -
Returns a unit-length vector having the same direction as
this
. No safety check is performed. -
Returns a unit-length vector having the same direction as
this
with safety checks. -
Converts to another 2D vector type such as
IntVec2
orInt2<s16>
.Float2 a = {4, 5}; IntVec2 b = a.to<IntVec2>();
-
Convenience functions for interpreting the vector as a color. The
r()
andg()
functions are aliases for thex
andy
components respectively.Float4 c = {1.0f, 0.8f}; StdOut::text().format("{}, {}", c.r(), c.g()); // "1.0, 0.8"
-
Returns a new vector whose components are taken from the given indices.
x
andy
are at indices 0 and 1 respectively. Similar to GLSL swizzling except that the components are specified by numeric index, and you can't use it to modify the original vector; only to read from it.Float2 v = {4, 5}; StdOut::text() << v.swizzle(1, 0); // "{5, 4}" StdOut::text() << v.swizzle(0, 1, 1, 0); // "{4, 5, 5, 4}"
These functions work correctly in the current version of all major compilers even though they use type punning, which is undefined behavior in standard C++.
-
Returns a copy of
v
with each component constrained to lie within the range determined by the corresponding components ofmins
andmaxs
.Float2 v = {3, 1.5f}; StdOut::text() << clamp(v, Float2{0, 1}, Float2{1, 2}); // "{1, 1.5}" StdOut::text() << clamp(v, 0, 1); // "{1, 1}"
-
Returns a vector with each component set to the absolute value of the corresponding component of
a
.StdOut::text() << abs(Float2{-2, 3}); // "{2, 3}"
-
Returns a vector with each component set to the corresponding component of
a
raised to the power of the corresponding component ofb
.StdOut::text() << pow(Float2{1, 2}, Float2{2, 3}); // "{1, 8}" StdOut::text() << pow(Float2{1, 2}, 2); // "{1, 4}"
-
Returns a vector with each component set to minimum of the corresponding components of
a
andb
.StdOut::text() << min(Float2{0, 1}, Float2{1, 0}); // "{0, 0}"
-
Returns a vector with each component set to maximum of the corresponding components of
a
andb
.StdOut::text() << max(Float2{0, 1}, Float2{1, 0}); // "{1, 1}"
-
Returns a vector with each component set to the rounded result of the corresponding component of
vec
. The optionalspacing
argument can be used to round to arbitrary spacings. Most precise whenspacing
is a power of 2.StdOut::text() << roundUp(Float2{-0.3f, 1.4f}); // "{0, 2}" StdOut::text() << roundDown(Float2{1.8f}, 0.5f); // "{1.5, 1.5}"
-
Returns
true
if every component ofvec
is already rounded. The optionalspacing
argument can be used to round to arbitrary spacings. Most precise whenspacing
is a power of 2.StdOut::text() << isRounded(Float2{1.5f, 2.5f}, 0.5f); // "true"