Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.98 KB | None | 0 0
  1. def __PROGTEST__
  2. #include <stdio.h>
  3. #include <assert.h>
  4. #include <math.h>
  5. #include <float.h>
  6. #include <stdlib.h>
  7. #define TRIANGLE_INVALID   (-1)
  8. #define POINT_OUTSIDE      0
  9. #define POINT_EDGE         1
  10. #define POINT_INSIDE       2
  11. #endif /* __PROGTEST__ */
  12.  
  13. int PointTriangle ( double x,  double y,
  14.                     double xA, double yA,   /*A*/
  15.                     double xB, double yB,   /*B*/
  16.                     double xC, double yC )  /*C*/
  17.  {
  18.  
  19. double a, b, v0x, v0y, v1x, v1y, v2x, v2y, soucin1, soucin2, soucin3, soucin4, soucin5, vzdalenost1, vzdalenost2, vzdalenost3, vzdalenostAbod, vzdalenostBbod, vzdalenostCbod;
  20.    
  21.    
  22.     /*lezi uvnitr?*/
  23.     v0x=xC-xA;
  24.     v0y=yC-yA;
  25.    
  26.     v1x=xB-xA;
  27.     v1y=yB-yA;
  28.    
  29.     v2x=x-xA;
  30.     v2y=y-yA;
  31.    
  32.     soucin1=(v0x*v0x)-(v0y*v0y);
  33.     soucin2=(v0x*v1x)-(v0y*v1y);
  34.     soucin3=(v0x*v2x)-(v0y*v2y);
  35.     soucin4=(v1x*v1x)-(v1y*v1y);
  36.     soucin5=(v1x*v2x)-(v1y*v2y);
  37.    
  38.     a=(soucin4*soucin3-soucin2*soucin5)/(soucin1*soucin4-soucin2*soucin2);
  39.     b=(soucin1*soucin5-soucin2*soucin3)/(soucin1*soucin4-soucin2*soucin2);
  40.    
  41.    
  42.     /*exsituje trojuhelnik?*/
  43.     vzdalenost1= sqrt((xA-xB)*(xA-xB)+(yA-yB)*(yA-yB)); /*AB*/
  44.     vzdalenost2= sqrt((xB-xC)*(xB-xC)+(yB-yC)*(yB-yC)); /*BC*/
  45.     vzdalenost3= sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); /*AC*/
  46.    
  47.     /*vzdalenost bodu od A/B/C*/
  48.     vzdalenostAbod= sqrt((xA-x)*(xA-x)+(yA-y)*(yA-y)); /*bod A od P*/
  49.    
  50.     vzdalenostBbod= sqrt((xB-x)*(xB-x)+(yB-y)*(yB-y)); /*bod B od P*/
  51.    
  52.     vzdalenostCbod= sqrt((xC-x)*(xC-x)+(yC-y)*(yC-y)); /*bod C od P*/
  53.    
  54.    
  55.     if (vzdalenost1<(vzdalenost2+vzdalenost3) || vzdalenost2<(vzdalenost1+vzdalenost3) || vzdalenost3<(vzdalenost2+vzdalenost1)){
  56.         return (-1);
  57.     }
  58.    
  59.     else if (vzdalenostAbod+vzdalenostBbod==vzdalenost1 || vzdalenostBbod+vzdalenostCbod==vzdalenost2 || vzdalenostAbod+vzdalenostCbod==vzdalenost3){
  60.         return 1;
  61.     }
  62.    
  63.     else if (a>=0 && b>=0 && (a+b)<1){
  64.         return 2;
  65.     }
  66.    
  67.     else
  68.         return 0;
  69.    
  70.  }
  71.  
  72. #ifndef __PROGTEST__
  73. int main ( int argc, char * argv [] )
  74.  {
  75.    assert ( PointTriangle ( 5, 5,
  76.                             0, 0,
  77.                             10, 0,
  78.                             5, 10 ) == POINT_INSIDE );
  79.    assert ( PointTriangle ( 0, 5,
  80.                             0, 0,
  81.                             10, 0,
  82.                             5, 10 ) == POINT_OUTSIDE );
  83.    assert ( PointTriangle ( 0.09, 0.02,
  84.                             0, 0,
  85.                             0.1, 0,
  86.                             0.05, 0.1 ) == POINT_EDGE );
  87.    assert ( PointTriangle ( 3, 5,
  88.                             0, 0,
  89.                             10, 0,
  90.                             10, 0 ) == TRIANGLE_INVALID );
  91.    assert ( PointTriangle ( 0, 0,
  92.                             -330, 934,
  93.                             701, -548,
  94.                             -2185.8, 3601.6 ) == TRIANGLE_INVALID );
  95.    return 0;
  96.  }
  97. #endif /* __PROGTEST__ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement