Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string>
- #include <iostream>
- #include <cstdlib>
- #include <cmath>
- #include <stack>
- using namespace std;
- struct point {
- double x ;
- double y ;
- };
- double det;
- point dot ( point A , point B , point C , point D) {
- point M;
- M.x = ((A.x * (A.y - B.y) + A.y * (B.x - A.x)) * (D.x - C.x) - (C.x * (C.y - D.y) + C.y * (D.x - C.x)) * ( B.x - A.x)) / det ;
- M.y = ( - (A.x * (A.y - B.y) + A.y * (B.x - A.x)) * (C.y - D.y) + (C.x * (C.y - D.y) + C.y * (D.x - C.x)) * (A.y - B.y)) / det;
- return M;
- }
- int main()
- {
- point A, B , C ,D;
- scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &A.x , &A.y , &B.x , &B.y , &C.x , &C.y , &D.x , &D.y);
- if ( (A.x - B.x) * (C.y - D.y) - (A.y - B.y) * (C.x - D.x) == 0 ) {
- printf ("no1");
- exit (0);
- }
- if ((C.x * (A.y - B.y) + C.y * (B.x - A.x) - A.x * (A.y - B.y) + A.y * (A.x - B.x) > 0
- && D.x * (A.y - B.y) + D.y * (B.x - A.x) - A.x * (A.y - B.y) + A.y * (A.x - B.x) > 0)
- || (C.x * (A.y - B.y) + C.y * (B.x - A.x) - A.x * (A.y - B.y) + A.y * (A.x - B.x) < 0
- && D.x * (A.y - B.y) + D.y * (B.x - A.x) - A.x * (A.y - B.y) + A.y * (A.x - B.x) < 0)) {
- printf ("no2");
- exit (0);
- }
- det = - ((A.x - B.x) * (C.y - D.y) - (A.y - B.y) * (C.x - D.x));
- point M = dot( A, B, C, D);
- if ( ( M.x < A.x && M.x < B.x) || (M.y > A.y && M.y > B.y)) {
- printf ("no3");
- }
- else printf ("yes");
- return (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement