Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool Physics::linesSegementsCrossing(Vec p1, Vec p2, Vec l1, Vec l2)
- {
- // iloc.zn wektoro.z p1->p2 i q1->q2 == 0 jesli rownolegle
- double cross_product = ((p1.x-p2.x) * (l1.z-l2.z)) - ((p1.z-p2.z) * (l1.x-l2.x));
- if (cross_product == 0)
- return false; // sa rownolegle (moga sie pok.zwac)
- // sprawdza.z punkt przeciêcia pros.zch opar.zch na .zch odcinkach
- 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 ))
- / ( (p1.x-p2.x)*(l1.z-l2.z) - (l1.x-l2.x)*(p1.z-p2.z) );
- 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))
- / ((p1.x-p2.x)*(l1.z-l2.z)-(l1.x-l2.x)*(p1.z-p2.z));
- 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 ) )
- return true;
- return false;
- }
Add Comment
Please, Sign In to add comment