Files
DayZ-Epoch/SQF/dayz_code/util/vector.sqf
2016-03-03 21:31:32 -05:00

53 lines
1.6 KiB
Plaintext

#include "Vector.hpp"
#define P0 _this select 0
#define P1 _this select 1
dz_fn_vector_dotProduct = { Vector_DotProduct_Fast(P0, P1); };
dz_fn_vector_crossProduct = { Vector_CrossProduct_Fast(P0, P1); };
dz_fn_vector_magnitude = { Vector_Magnitude_Fast(_this); };
dz_fn_vector_add = { Vector_Add_Fast(P0, P1); };
dz_fn_vector_subtract = { Vector_Subtract_Fast(P0, P1); };
dz_fn_vector_negate = { Vector_Negate_Fast(_this); };
dz_fn_vector_multiply = { Vector_Multiply_Fast(P0, P1); };
dz_fn_vector_divide = { Vector_Divide_Fast(P0, P1); };
dz_fn_vector_angle = { Vector_Angle_Fast(P0, P1); };
dz_fn_vector_normalize = { Vector_Normalize_Fast(_this); };
dz_fn_vector_fromDir = { Vector_FromDir_Fast(_this); };
dz_fn_vector_rotate2d = { Vector_Rotate2D_Fast(P0, P1); };
dz_fn_vector_rotate3d =
{
#define VX (_this select 0 select 0)
#define VY (_this select 0 select 1)
#define VZ (_this select 0 select 2)
#define UX (_this select 1 select 0)
#define UY (_this select 1 select 1)
#define UZ (_this select 1 select 2)
private ["_sin", "_cos", "_icos"];
_sin = sin (_this select 2);
_cos = cos (_this select 2);
_icos = 1 - _cos;
[
VX * ( UX ^ 2 * _icos + _cos ) +
VY * ( UX * UY * _icos - UZ * _sin ) +
VZ * ( UX * UZ * _icos + UY * _sin )
,
VX * ( UY * UX * _icos + UZ * _sin ) +
VY * ( UY ^ 2 * _icos + _cos ) +
VZ * ( UY * UZ * _icos - UX * _sin )
,
VX * ( UZ * UX * _icos - UY * _sin ) +
VY * ( UZ * UY * _icos + UX * _sin ) +
VZ * ( UZ ^ 2 * _icos + _cos )
]
#undef VX
#undef VY
#undef VZ
#undef UX
#undef UY
#undef UZ
};