1
0
mirror of https://github.com/thes3m/XNI synced 2024-12-26 13:26:06 +01:00
XNI/Classes/Retronator/Xni/Framework/Vector2Struct.h
Matej Jan a5e7c0f9ff Lerp added to vectors.
git-svn-id: http://xni.googlecode.com/svn/XNI@115 ac433895-eea3-a490-d80a-17149a75e588
2012-09-25 11:47:02 +00:00

79 lines
2.5 KiB
Objective-C

#import "MatrixStruct.h"
typedef struct {
float x;
float y;
} Vector2Struct;
static inline Vector2Struct Vector2Make(float x, float y)
{
Vector2Struct vector;
vector.x = x;
vector.y = y;
return vector;
}
static inline void Vector2Set(Vector2Struct *vector, float x, float y)
{
vector->x = x;
vector->y = y;
}
static inline float Vector2LengthSquared(Vector2Struct *value) {
return value->x * value->x + value->y * value->y;
}
static inline float Vector2Length(Vector2Struct *value) {
return sqrtf(Vector2LengthSquared(value));
}
static inline void Vector2Normalize(Vector2Struct *value) {
float scalar = 1.0f / Vector2Length(value);
value->x *= scalar;
value->y *= scalar;
}
static inline void Vector2Negate(Vector2Struct *value) {
value->x = -value->x;
value->y = -value->y;
}
static inline void Vector2Add(Vector2Struct *value1, Vector2Struct *value2, Vector2Struct *result) {
Vector2Set(result, value1->x + value2->x, value1->y + value2->y);
}
static inline void Vector2Subtract(Vector2Struct *value1, Vector2Struct *value2, Vector2Struct *result) {
Vector2Set(result, value1->x - value2->x, value1->y - value2->y);
}
static inline void Vector2Multiply(Vector2Struct *value1, float scaleFactor, Vector2Struct *result) {
Vector2Set(result, value1->x * scaleFactor, value1->y * scaleFactor);
}
static inline void Vector2MultiplyComponents(Vector2Struct *value1, Vector2Struct *value2, Vector2Struct *result) {
Vector2Set(result, value1->x * value2->x, value1->y * value2->y);
}
static inline float Vector2DotProduct(Vector2Struct *value1, Vector2Struct *value2) {
return value1->x * value2->x + value1->y * value2->y;
}
static inline void Vector2Transform(Vector2Struct *value, MatrixStruct *matrix, Vector2Struct *result) {
Vector2Set(result,
(value->x * matrix->m11) + (value->y * matrix->m21) + matrix->m41,
(value->x * matrix->m12) + (value->y * matrix->m22) + matrix->m42);
}
static inline void Vector2TransformNormal(Vector2Struct *value, MatrixStruct *matrix, Vector2Struct *result) {
Vector2Set(result,
(value->x * matrix->m11) + (value->y * matrix->m21),
(value->x * matrix->m12) + (value->y * matrix->m22));
}
static inline void Vector2Lerp(Vector2Struct *value1, Vector2Struct *value2, float amount, Vector2Struct *result) {
if (amount <= 0) *result = *value1;
if (amount >= 1) *result = *value2;
Vector2Set(result,
value1->x + (value2->x - value1->x) * amount,
value1->y + (value2->y - value1->y) * amount);
}