1234567891011121314151617181920212223242526272829303132333435363738 |
- #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();
- }
|