Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct pt{double x, y; pt(){} pt(double a, double b){x = a; y = b;}};
- bool SegmentsCross(pt a1, pt a2, pt b1, pt b2)
- {
- double Aa = a1.y - a2.y, Ba = a2.x - a1.x;
- double Ca = - (Aa * a1.x + Ba * a1.y);
- double Ab = b1.y - b2.y, Bb = b2.x - b1.x;
- double Cb = - (Ab * b1.x + Bb * b1.y);
- double
- b1InA = Aa*b1.x + Ba*b1.y + Ca,
- b2InA = Aa*b2.x + Ba*b2.y + Ca,
- a1InB = Ab*a1.x + Bb*a1.y + Cb,
- a2InB = Ab*a2.x + Bb*a2.y + Cb;
- if (b1InA == 0 && b2InA == 0) // one line
- {
- if (a1.x > a2.x)
- swap(a1.x, a2.x);
- if (a1.y > a2.y)
- swap(a1.y, a2.y);
- return
- a1.x <= b1.x && b1.x <= a2.x && a1.y <= b1.y && b1.y <= a2.y ||
- a1.x <= b2.x && b2.x <= a2.x && a1.y <= b2.y && b2.y <= a2.y;
- }
- else
- return !(b1InA < 0 && b2InA < 0 || a1InB < 0 && a2InB < 0 || b1InA > 0 && b2InA > 0 || a1InB > 0 && a2InB > 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement