kmath.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "kmath.h"
  2. // Ermittelt von einem Punkt p aus den Nächstgelegenen Punkt auf einer Linie zwischen zwei Punkten a und b
  3. QPoint Math::getNearestPointOnLine( QPoint p, QPoint a, QPoint b )
  4. {
  5. double xp = p.x(), yp = p.y(), xa = a.x(), ya = a.y(), xb = b.x(), yb = b.y(), xr, yr;
  6. if( xb == xa )
  7. {
  8. xr = 1;
  9. yr = 0;
  10. }
  11. else if( yb == ya )
  12. {
  13. xr = 0;
  14. yr = 1;
  15. }
  16. else
  17. {
  18. xr = 1;
  19. yr = -1 / ( (yb - ya) / (xb - xa) );
  20. }
  21. double xd = xb - xa, yd = yb - ya;
  22. double x = ((yp-ya)*xr + (xa-xp)*yr) / (yd*xr - xd*yr);
  23. if( x >= 0 && x <= 1 )
  24. return QPoint( (int)( xa + x * xd ), (int)( ya + x * yd ) );
  25. if( (xa - xp) * (xa - xp) + (ya - yp) * (ya - yp) > (xb - xp) * (xb - xp) + (yb - yp) * (yb - yp) )
  26. return b;
  27. else
  28. return a;
  29. }
  30. // Ermittelt das Quadrat von dem Abstand zwischen den Punkten a und b
  31. int Math::diffSquare( QPoint a, QPoint b )
  32. {
  33. QPoint tmp = b - a;
  34. return tmp.x() * tmp.x() + tmp.y() * tmp.y();
  35. }