#include "kmath.h"


// Ermittelt von einem Punkt p aus den Nächstgelegenen Punkt auf einer Linie zwischen zwei Punkten a und b
QPoint Math::getNearestPointOnLine( QPoint p, QPoint a, QPoint b )
{
    double xp = p.x(), yp = p.y(), xa = a.x(), ya = a.y(), xb = b.x(), yb = b.y(), xr, yr;
    if( xb == xa )
    {
        xr = 1;
        yr = 0;
    }
    else if( yb == ya )
    {
        xr = 0;
        yr = 1;
    }
    else
    {
        xr = 1;
        yr = -1 / ( (yb - ya) / (xb - xa) );
    }
    double xd = xb - xa, yd = yb - ya;
    double x = ((yp-ya)*xr + (xa-xp)*yr) / (yd*xr - xd*yr);
    if( x >= 0 && x <= 1 )
        return QPoint( (int)( xa + x * xd ), (int)( ya + x * yd ) );
    if( (xa - xp) * (xa - xp) + (ya - yp) * (ya - yp) > (xb - xp) * (xb - xp) + (yb - yp) * (yb - yp) )
        return b;
    else
        return a;
}

// Ermittelt das Quadrat von dem Abstand zwischen den Punkten a und b
int Math::diffSquare( QPoint a, QPoint b )
{
    QPoint tmp = b - a;
    return tmp.x() * tmp.x() + tmp.y() * tmp.y();
}
