https://bitbucket.org/ggerganov/test_opengl
C++ Header | 43 lines | 32 code | 3 blank | 8 comment | 0 complexity | 61cc3ee62a38f46d0be2ffb2f98c09a2 MD5 | raw file
``````
///////////////////////////////////////////////////////////////////////////////////////////////////

// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)

///////////////////////////////////////////////////////////////////////////////////////////////////

// Created : 2009-03-06

// Updated : 2009-03-09

// Licence : This source is under MIT License

///////////////////////////////////////////////////////////////////////////////////////////////////

namespace glm

{

template <typename valType>

(

detail::tvec2<valType> const & Center,

detail::tvec2<valType> const & Focal,

detail::tvec2<valType> const & Position

)

{

detail::tvec2<valType> F = Focal - Center;

detail::tvec2<valType> D = Position - Focal;

valType Fx2 = pow2(F.x);

valType Fy2 = pow2(F.y);

valType Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));

valType Denominator = Radius2 - (Fx2 + Fy2);

return Numerator / Denominator;

}

template <typename valType>

(

detail::tvec2<valType> const & Point0,

detail::tvec2<valType> const & Point1,

detail::tvec2<valType> const & Position

)

{

detail::tvec2<valType> Dist = Point1 - Point0;

return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);

}

}//namespace glm

``````