36 #ifndef __CU_AFFINE2_H__
37 #define __CU_AFFINE2_H__
41 #include "CUMathBase.h"
79 #pragma mark Constructors
99 Affine2(
float m11,
float m12,
float m21,
float m22,
float tx,
float ty);
136 #pragma mark Static Constructors
301 memcpy(this->m, mat.m,
sizeof(
float)*4);
302 this->offset = mat.offset;
336 Affine2&
set(
float m11,
float m12,
float m21,
float m22,
float tx,
float ty);
379 #pragma mark Static Arithmetic
448 #pragma mark Arithmetic
459 return *(
add(*
this,v,
this));
485 return *(
multiply(*
this,scalar,
this));
512 return *(
invert(*
this,
this));
531 #pragma mark Operators
542 return *(
add(*
this,v,
this));
568 return *(
multiply(*
this,scalar,
this));
599 return *(
add(*
this,v,&result));
615 return *(
subtract(*
this,v,&result));
631 return *(
multiply(*
this,scalar,&result));
650 return *(
multiply(*
this,aff,&result));
655 #pragma mark Comparisons
679 bool equals(
const Affine2& mat,
float variance=CU_MATH_EPSILON)
const;
711 #pragma mark Affine Attributes
747 return m[0]*m[3]-m[2]*m[1];
766 decompose(*
this,&result,
nullptr,
nullptr);
780 decompose(*
this,
nullptr,&result,
nullptr);
795 decompose(*
this,
nullptr,
nullptr,&result);
800 #pragma mark Vector Operations
838 return *(
transform(*
this,point,&result));
858 #pragma mark Static Transform Manipulation
1004 #pragma mark Matrix Transforms
1018 return *(
rotate(*
this,angle,
this));
1032 return *(
scale(*
this,value,
this));
1046 return *(
scale(*
this,s,
this));
1061 return *(
scale(*
this,sx,sy,
this));
1095 #pragma mark Conversion Methods
1106 std::string
toString(
bool verbose =
false)
const;
1112 operator Mat4()
const;
1153 #pragma mark Vector Operations
1165 inline Vec2& operator*=(Vec2& v,
const Affine2& m) {
1177 inline const Vec2 operator*(
const Vec2& v,
const Affine2& m) {
1193 inline const Affine2 operator*(
float scalar,
const Affine2& m) {
1195 return result.multiply(scalar);
static Affine2 * multiply(const Affine2 &mat, float scalar, Affine2 *dst)
float getDeterminant() const
Definition: CUAffine2.h:746
Affine2 & subtract(const Vec2 &v)
Definition: CUAffine2.h:471
~Affine2()
Definition: CUAffine2.h:132
Affine2 & translate(float tx, float ty)
Definition: CUAffine2.h:1089
std::string toString(bool verbose=false) const
Vec2 transform(const Vec2 &point) const
Definition: CUAffine2.h:836
static Affine2 * translate(const Affine2 &aff, float tx, float ty, Affine2 *dst)
Definition: CUAffine2.h:970
Affine2 & rotate(float angle)
Definition: CUAffine2.h:1017
Affine2 & operator=(const float *array)
Definition: CUAffine2.h:320
Affine2 & scale(float sx, float sy)
Definition: CUAffine2.h:1060
Definition: CUAffine2.h:63
Affine2 & multiply(const Affine2 &aff)
Definition: CUAffine2.h:499
const Affine2 operator*(const Affine2 &aff) const
Definition: CUAffine2.h:648
bool operator==(const Affine2 &aff) const
Definition: CUAffine2.h:692
static const Affine2 ZERO
Definition: CUAffine2.h:72
static Affine2 * scale(const Affine2 &aff, float value, Affine2 *dst)
Definition: CUAffine2.h:892
const Affine2 operator+(const Vec2 &v) const
Definition: CUAffine2.h:597
Affine2 & translate(const Vec2 &t)
Definition: CUAffine2.h:1074
Affine2 & operator*=(const Affine2 &aff)
Definition: CUAffine2.h:582
bool isExactly(const Affine2 &aff) const
Affine2 getInverse() const
Definition: CUAffine2.h:524
static Affine2 createRotation(float angle)
Definition: CUAffine2.h:215
Affine2 & operator-=(const Vec2 &v)
Definition: CUAffine2.h:554
static Affine2 * translate(const Affine2 &aff, const Vec2 &t, Affine2 *dst)
Definition: CUAffine2.h:950
bool isInvertible(float variance=CU_MATH_EPSILON) const
Definition: CUAffine2.h:734
Affine2 & operator=(Affine2 &&mat)
Definition: CUAffine2.h:300
static Affine2 createScale(float sx, float sy)
Definition: CUAffine2.h:167
static Affine2 * rotate(const Affine2 &aff, float angle, Affine2 *dst)
Definition: CUAffine2.h:873
const Affine2 operator*(float scalar) const
Definition: CUAffine2.h:629
static Vec2 * transform(const Affine2 &aff, const Vec2 &point, Vec2 *dst)
static Affine2 createTranslation(const Vec2 &trans)
Definition: CUAffine2.h:240
Affine2 & scale(const Vec2 &s)
Definition: CUAffine2.h:1045
bool equals(const Affine2 &mat, float variance=CU_MATH_EPSILON) const
float m[4]
Definition: CUAffine2.h:67
Affine2 & invert()
Definition: CUAffine2.h:511
Affine2 & operator+=(const Vec2 &v)
Definition: CUAffine2.h:541
Vec2 offset
Definition: CUAffine2.h:69
Affine2 & operator*=(float scalar)
Definition: CUAffine2.h:567
static const Affine2 IDENTITY
Definition: CUAffine2.h:76
Vec2 getScale() const
Definition: CUAffine2.h:764
Vec2 getTranslation() const
Definition: CUAffine2.h:793
static bool decompose(const Affine2 &mat, Vec2 *scale, float *rot, Vec2 *trans)
static Affine2 * scale(const Affine2 &aff, const Vec2 &s, Affine2 *dst)
Definition: CUAffine2.h:911
Affine2 & add(const Vec2 &v)
Definition: CUAffine2.h:458
Affine2 & set(float m11, float m12, float m21, float m22, float tx, float ty)
static Affine2 createTranslation(float tx, float ty)
Definition: CUAffine2.h:263
static Affine2 * subtract(const Affine2 &m1, const Vec2 &v, Affine2 *dst)
static const Affine2 ONE
Definition: CUAffine2.h:74
static Affine2 createScale(float scale)
Definition: CUAffine2.h:144
Affine2 & scale(float value)
Definition: CUAffine2.h:1031
static Affine2 * add(const Affine2 &m, const Vec2 &v, Affine2 *dst)
bool operator!=(const Affine2 &aff) const
Definition: CUAffine2.h:706
static Affine2 * scale(const Affine2 &aff, float sx, float sy, Affine2 *dst)
Definition: CUAffine2.h:931
Affine2 & operator=(const Affine2 &mat)
Definition: CUAffine2.h:289
Definition: CUAction.h:51
static Affine2 createScale(const Vec2 &scale)
Definition: CUAffine2.h:190
Affine2 & multiply(float scalar)
Definition: CUAffine2.h:484
bool isIdentity(float variance=0.0f) const
float getRotation() const
Definition: CUAffine2.h:778
const Affine2 operator-(const Vec2 &v) const
Definition: CUAffine2.h:613