Guest User

Untitled

a guest
May 21st, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. bool Physics::linesSegementsCrossing(Vec p1, Vec p2, Vec l1, Vec l2)
  2. {
  3.     // iloc.zn wektoro.z p1->p2 i q1->q2 == 0 jesli rownolegle
  4.     double cross_product = ((p1.x-p2.x) * (l1.z-l2.z)) - ((p1.z-p2.z) * (l1.x-l2.x));
  5.     if (cross_product == 0)
  6.         return false; // sa rownolegle (moga sie pok.zwac)
  7.  
  8.     // sprawdza.z punkt przeciêcia pros.zch opar.zch na .zch odcinkach
  9.     double x = (p2.x * (l1.x*l2.z - l2.x*l1.z + (l2.x-l1.x)*p1.z) + p1.x * (l2.x*l1.z - l1.x*l2.z + (l1.x-l2.x) *p2.z ))
  10.                / ( (p1.x-p2.x)*(l1.z-l2.z) - (l1.x-l2.x)*(p1.z-p2.z) );
  11.     double z = (p2.z * (l1.x*l2.z - l2.x*l1.z) + p1.z*(l2.x*l1.z-l1.x*l2.z) + p2.x*p1.z*(l2.z-l1.z)+p1.x*p2.z*(l1.z-l2.z))
  12.                 / ((p1.x-p2.x)*(l1.z-l2.z)-(l1.x-l2.x)*(p1.z-p2.z));
  13.  
  14.     if ( ( x <= p1.x && x >= p2.x || x >= p1.x && x <= p2.x ) && ( x <= l1.x && x >= l2.x || x >= l1.x && x <= l2.x ) )
  15.         return true;
  16.     return false;
  17. }
Add Comment
Please, Sign In to add comment