Skip to content

Commit

Permalink
Kinematics equations
Browse files Browse the repository at this point in the history
  • Loading branch information
nijlogan committed Jan 2, 2022
1 parent 25a17c3 commit 773f661
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
48 changes: 48 additions & 0 deletions source/GcLib/gstd/GstdUtility.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,54 @@ namespace gstd {
return DifferentialLinear<T>;
}
};

class Kinematic {
public:
template<typename T>
static inline T U_VAD(T v, T a, T d) { return sqrt(v * v - 2 * a * d); }
template<typename T>
static inline T U_VAT(T v, T a, T t) { return v - a * t; }
template<typename T>
static inline T U_VDT(T v, T d, T t) { return 2 * d / t - v; }
template<typename T>
static inline T U_ADT(T a, T d, T t) { return d / t - a * t / 2; }

template<typename T>
static inline T V_UAD(T u, T a, T d) { return sqrt(u * u + 2 * a * d); }
template<typename T>
static inline T V_UAT(T u, T a, T t) { return u + a * t; }
template<typename T>
static inline T V_UDT(T u, T d, T t) { return 2 * d / t - u; }
template<typename T>
static inline T V_ADT(T a, T d, T t) { return d / t + a * t / 2; }

template<typename T>
static inline T A_UVD(T u, T v, T d) { return (v * v - u * u) / (2 * d); }
template<typename T>
static inline T A_UVT(T u, T v, T t) { return (v - u) / t; }
template<typename T>
static inline T A_UDT(T u, T d, T t) { return 2 * (d - u * t) / (t * t); }
template<typename T>
static inline T A_VDT(T v, T d, T t) { return 2 * (v * t - d) / (t * t); }

template<typename T>
static inline T D_UVA(T u, T v, T a) { return (v * v - u * u) / (2 * a); }
template<typename T>
static inline T D_UVT(T u, T v, T t) { return t / 2 * (u + v); }
template<typename T>
static inline T D_UAT(T u, T a, T t) { return u * t + a * t * t / 2; }
template<typename T>
static inline T D_VAT(T v, T a, T t) { return v * t - a * t * t / 2; }

template<typename T>
static inline T T_UVA(T u, T v, T a) { return (v - u) / a; }
template<typename T>
static inline T T_UVD(T u, T v, T d) { return 2 * d / (u + v); }
template<typename T>
static inline T T_UAD(T u, T a, T d) { return (-u + sqrt(u * u + 2 * a * d)) / a; }
template<typename T>
static inline T T_VAD(T v, T a, T d) { return (v - sqrt(v * v - 2 * a * d)) / a; }
};
};
#endif

Expand Down
27 changes: 27 additions & 0 deletions source/GcLib/gstd/ScriptClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,28 @@ static const std::vector<function> commonFunction = {
{ "Interpolate_X_AngleR", ScriptClientBase::Func_Interpolate_X_Angle<true>, 4 },
{ "Interpolate_X_Array", ScriptClientBase::Func_Interpolate_X_Array, 3 },

//Kinematics
{ "Kinematic_U_VAD", ScriptClientBase::Func_Kinematic<Math::Kinematic::U_VAD>, 3 },
{ "Kinematic_U_VAT", ScriptClientBase::Func_Kinematic<Math::Kinematic::U_VAT>, 3 },
{ "Kinematic_U_VDT", ScriptClientBase::Func_Kinematic<Math::Kinematic::U_VDT>, 3 },
{ "Kinematic_U_ADT", ScriptClientBase::Func_Kinematic<Math::Kinematic::U_ADT>, 3 },
{ "Kinematic_V_UAD", ScriptClientBase::Func_Kinematic<Math::Kinematic::V_UAD>, 3 },
{ "Kinematic_V_UAT", ScriptClientBase::Func_Kinematic<Math::Kinematic::V_UAT>, 3 },
{ "Kinematic_V_UDT", ScriptClientBase::Func_Kinematic<Math::Kinematic::V_UDT>, 3 },
{ "Kinematic_V_ADT", ScriptClientBase::Func_Kinematic<Math::Kinematic::V_ADT>, 3 },
{ "Kinematic_A_UVD", ScriptClientBase::Func_Kinematic<Math::Kinematic::A_UVD>, 3 },
{ "Kinematic_A_UVT", ScriptClientBase::Func_Kinematic<Math::Kinematic::A_UVT>, 3 },
{ "Kinematic_A_UDT", ScriptClientBase::Func_Kinematic<Math::Kinematic::A_UDT>, 3 },
{ "Kinematic_A_VDT", ScriptClientBase::Func_Kinematic<Math::Kinematic::A_VDT>, 3 },
{ "Kinematic_D_UVA", ScriptClientBase::Func_Kinematic<Math::Kinematic::D_UVA>, 3 },
{ "Kinematic_D_UVT", ScriptClientBase::Func_Kinematic<Math::Kinematic::D_UVT>, 3 },
{ "Kinematic_D_UAT", ScriptClientBase::Func_Kinematic<Math::Kinematic::D_UAT>, 3 },
{ "Kinematic_D_VAT", ScriptClientBase::Func_Kinematic<Math::Kinematic::D_VAT>, 3 },
{ "Kinematic_T_UVA", ScriptClientBase::Func_Kinematic<Math::Kinematic::T_UVA>, 3 },
{ "Kinematic_T_UVD", ScriptClientBase::Func_Kinematic<Math::Kinematic::T_UVD>, 3 },
{ "Kinematic_T_UAD", ScriptClientBase::Func_Kinematic<Math::Kinematic::T_UAD>, 3 },
{ "Kinematic_T_VAD", ScriptClientBase::Func_Kinematic<Math::Kinematic::T_VAD>, 3 },

//Rotation
{ "Rotate2D", ScriptClientBase::Func_Rotate2D, 3 },
{ "Rotate2D", ScriptClientBase::Func_Rotate2D, 5 },
Expand Down Expand Up @@ -1449,6 +1471,11 @@ value ScriptClientBase::Func_Interpolate_X_Array(script_machine* machine, int ar
return _ScriptValueLerp(machine, &arr[from], &arr[to], x, lerpFunc);
}

template<double (*funcKinematic)(double, double, double)>
value ScriptClientBase::Func_Kinematic(script_machine* machine, int argc, const value* argv) {
return CreateRealValue(funcKinematic(argv[0].as_real(), argv[1].as_real(), argv[2].as_real()));
}

value ScriptClientBase::Func_Rotate2D(script_machine* machine, int argc, const value* argv) {
double pos[2] = { argv[0].as_real(), argv[1].as_real() };
double ang = argv[2].as_real();
Expand Down
4 changes: 4 additions & 0 deletions source/GcLib/gstd/ScriptClient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,10 @@ namespace gstd {
DNH_FUNCAPI_DECL_(Func_Interpolate_X_Angle);
DNH_FUNCAPI_DECL_(Func_Interpolate_X_Array);

//Math functions; kinematics
template<double (*funcKinematic)(double, double, double)>
DNH_FUNCAPI_DECL_(Func_Kinematic);

//Math functions; rotation
DNH_FUNCAPI_DECL_(Func_Rotate2D);
DNH_FUNCAPI_DECL_(Func_Rotate3D);
Expand Down

0 comments on commit 773f661

Please sign in to comment.