closest_segment_point.h

Back to Closest points

pastel/geometry/closest/

// Description: Closest points between a line segment and a point

#ifndef PASTELGEOMETRY_CLOSEST_SEGMENT_POINT_H
#define PASTELGEOMETRY_CLOSEST_SEGMENT_POINT_H

#include "pastel/geometry/shape/segment.h"

#include "pastel/sys/vector.h"

namespace Pastel
{

    //! Computes closest points between a line segment and a point.
    /*!
   Returns:
   A parameter t such that 'segment.at(t)' and 'point' are 
   closest points.
   */
    template <typename Real, int N>
    Real closest(
        const Segment<Real, N>& segment,
        const Vector<Real, N>& point)
    {
        Real t = dot(point - segment.start(), 
            segment.end() - segment.start()) /
            dot(segment.end() - segment.start());

        if (t < 0)
        {
            t = 0;
        }
        else if (t > 1)
        {
            t = 1;
        }

        return t;
    }

}

#endif