prometheus800

Пресек на отсечки

Mar 23rd, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. /*
  2. Пресек на отсечки Problem 2 (1 / 6)
  3. Да се напише структура која ќе опишува отсечка во дводимензионален простор (две точки). Потоа да се напише функција која ќе проверува дали две отсечки се сечат.
  4. */
  5.  
  6. #include <stdio.h>
  7.  
  8. typedef struct tocka {
  9.     float x;
  10.     float y;
  11. } tocka;
  12.  
  13. typedef struct otsecka {
  14.     tocka a;
  15.     tocka b;
  16. } otsecka;
  17. typedef struct prava{
  18.     float k;
  19.     tocka t;
  20. }prava;
  21.  
  22. int secat(otsecka o1, otsecka o2) {
  23.     prava p1,p2;
  24.     p1.k=(o1.b.y-o1.a.y)/(o1.b.x-o1.a.x);
  25.     p1.t=o1.a;
  26.     p2.k=(o2.b.y-o2.a.y)/(o2.b.x-o2.a.x);
  27.     p2.t=o2.a;
  28.     if(p1.k==p2.k)
  29.         return 0;
  30.     tocka presek;
  31.     presek.x=(p2.k*p2.t.x-p1.k*p1.t.x+p1.t.y-p2.t.y)/(p2.k-p1.k);
  32.     presek.y=p1.k*(presek.x-p1.t.x)+p1.t.y;
  33.     int secat;
  34.     secat=(((presek.x<=o1.a.x)&&(presek.x>=o1.b.x))||((presek.x>=o1.a.x)&&(presek.x<=o1.b.x)))&&(((presek.x<=o2.a.x)&&(presek.x>=o2.b.x))||((presek.x>=o2.a.x)&&(presek.x<=o2.b.x)));
  35.     return secat;
  36.    
  37. }
  38.  
  39. int main() {
  40.     float x1, y1, x2, y2;
  41.     scanf("%f %f %f %f", &x1, &y1, &x2, &y2);
  42.     tocka t1 = { x1, y1 };
  43.     tocka t2 = { x2, y2 };
  44.     otsecka o1 = { t1, t2 };
  45.     scanf("%f %f %f %f", &x1, &y1, &x2, &y2);
  46.     tocka t3 = { x1, y1 };
  47.     tocka t4 = { x2, y2 };
  48.     otsecka o2 = { t3, t4 };
  49.     printf("%d\n", secat(o1, o2));
  50.     return 0;
  51. }
Add Comment
Please, Sign In to add comment