Added vec2 cross #621
parent
96adec5f5e
commit
40398d67cd
5 changed files with 83 additions and 0 deletions
@ -0,0 +1,40 @@ |
||||
/// @ref gtx_exterior_product
|
||||
/// @file glm/gtx/exterior_product.hpp
|
||||
///
|
||||
/// @see core (dependence)
|
||||
/// @see gtx_exterior_product (dependence)
|
||||
///
|
||||
/// @defgroup gtx_exterior_product GLM_GTX_exterior_product
|
||||
/// @ingroup gtx
|
||||
///
|
||||
/// @brief Allow to perform bit operations on integer values
|
||||
///
|
||||
/// <glm/gtc/bitfield.hpp> need to be included to use these functionalities.
|
||||
|
||||
#pragma once |
||||
|
||||
// Dependencies
|
||||
#include "../detail/setup.hpp" |
||||
#include "../detail/precision.hpp" |
||||
|
||||
#if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) |
||||
# pragma message("GLM: GLM_GTX_exterior_product extension included") |
||||
#endif |
||||
|
||||
namespace glm |
||||
{ |
||||
/// @addtogroup gtx_exterior_product
|
||||
/// @{
|
||||
|
||||
/// Returns the cross product of x and y.
|
||||
///
|
||||
/// @tparam valType Floating-point scalar types.
|
||||
///
|
||||
/// @see <a href="https://en.wikipedia.org/wiki/Exterior_algebra#Cross_and_triple_products">Exterior product</a>
|
||||
template<typename T, precision P> |
||||
GLM_FUNC_DECL T cross(vec<2, T, P> const& v, vec<2, T, P> const& u); |
||||
|
||||
/// @}
|
||||
} //namespace glm
|
||||
|
||||
#include "exterior_product.inl" |
@ -0,0 +1,27 @@ |
||||
/// @ref core |
||||
/// @file glm/detail/func_geometric.inl |
||||
|
||||
#include <limits> |
||||
|
||||
namespace glm { |
||||
namespace detail |
||||
{ |
||||
template<typename T, precision P, bool Aligned> |
||||
struct compute_cross_vec2 |
||||
{ |
||||
GLM_FUNC_QUALIFIER static T call(vec<2, T, P> const& v, vec<2, T, P> const& u) |
||||
{ |
||||
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'cross' accepts only floating-point inputs"); |
||||
|
||||
return v.x * u.y - u.x * v.y; |
||||
} |
||||
}; |
||||
}//namespace detail |
||||
|
||||
template<typename T, precision P> |
||||
GLM_FUNC_QUALIFIER T cross(vec<2, T, P> const & x, vec<2, T, P> const & y) |
||||
{ |
||||
return detail::compute_cross_vec2<T, P, detail::is_aligned<P>::value>::call(x, y); |
||||
} |
||||
}//namespace glm |
||||
|
@ -0,0 +1,14 @@ |
||||
#include <glm/gtx/exterior_product.hpp> |
||||
#include <glm/gtc/epsilon.hpp> |
||||
#include <glm/vec2.hpp> |
||||
|
||||
int main() |
||||
{ |
||||
int Error = 0; |
||||
|
||||
float const f = glm::cross(glm::vec2(1.0f, 1.0f), glm::vec2(1.0f, 1.0f)); |
||||
Error += glm::epsilonEqual(f, 0.0f, 0.001f) ? 0 : 1; |
||||
|
||||
return Error; |
||||
} |
||||
|
Loading…
Reference in New Issue