Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def __PROGTEST__
- #include <stdio.h>
- #include <assert.h>
- #include <math.h>
- #include <float.h>
- #include <stdlib.h>
- #define TRIANGLE_INVALID (-1)
- #define POINT_OUTSIDE 0
- #define POINT_EDGE 1
- #define POINT_INSIDE 2
- #endif /* __PROGTEST__ */
- int PointTriangle ( double x, double y,
- double xA, double yA, /*A*/
- double xB, double yB, /*B*/
- double xC, double yC ) /*C*/
- {
- double a, b, v0x, v0y, v1x, v1y, v2x, v2y, soucin1, soucin2, soucin3, soucin4, soucin5, vzdalenost1, vzdalenost2, vzdalenost3, vzdalenostAbod, vzdalenostBbod, vzdalenostCbod;
- /*lezi uvnitr?*/
- v0x=xC-xA;
- v0y=yC-yA;
- v1x=xB-xA;
- v1y=yB-yA;
- v2x=x-xA;
- v2y=y-yA;
- soucin1=(v0x*v0x)-(v0y*v0y);
- soucin2=(v0x*v1x)-(v0y*v1y);
- soucin3=(v0x*v2x)-(v0y*v2y);
- soucin4=(v1x*v1x)-(v1y*v1y);
- soucin5=(v1x*v2x)-(v1y*v2y);
- a=(soucin4*soucin3-soucin2*soucin5)/(soucin1*soucin4-soucin2*soucin2);
- b=(soucin1*soucin5-soucin2*soucin3)/(soucin1*soucin4-soucin2*soucin2);
- /*exsituje trojuhelnik?*/
- vzdalenost1= sqrt((xA-xB)*(xA-xB)+(yA-yB)*(yA-yB)); /*AB*/
- vzdalenost2= sqrt((xB-xC)*(xB-xC)+(yB-yC)*(yB-yC)); /*BC*/
- vzdalenost3= sqrt((xA-xC)*(xA-xC)+(yA-yC)*(yA-yC)); /*AC*/
- /*vzdalenost bodu od A/B/C*/
- vzdalenostAbod= sqrt((xA-x)*(xA-x)+(yA-y)*(yA-y)); /*bod A od P*/
- vzdalenostBbod= sqrt((xB-x)*(xB-x)+(yB-y)*(yB-y)); /*bod B od P*/
- vzdalenostCbod= sqrt((xC-x)*(xC-x)+(yC-y)*(yC-y)); /*bod C od P*/
- if (vzdalenost1<(vzdalenost2+vzdalenost3) || vzdalenost2<(vzdalenost1+vzdalenost3) || vzdalenost3<(vzdalenost2+vzdalenost1)){
- return (-1);
- }
- else if (vzdalenostAbod+vzdalenostBbod==vzdalenost1 || vzdalenostBbod+vzdalenostCbod==vzdalenost2 || vzdalenostAbod+vzdalenostCbod==vzdalenost3){
- return 1;
- }
- else if (a>=0 && b>=0 && (a+b)<1){
- return 2;
- }
- else
- return 0;
- }
- #ifndef __PROGTEST__
- int main ( int argc, char * argv [] )
- {
- assert ( PointTriangle ( 5, 5,
- 0, 0,
- 10, 0,
- 5, 10 ) == POINT_INSIDE );
- assert ( PointTriangle ( 0, 5,
- 0, 0,
- 10, 0,
- 5, 10 ) == POINT_OUTSIDE );
- assert ( PointTriangle ( 0.09, 0.02,
- 0, 0,
- 0.1, 0,
- 0.05, 0.1 ) == POINT_EDGE );
- assert ( PointTriangle ( 3, 5,
- 0, 0,
- 10, 0,
- 10, 0 ) == TRIANGLE_INVALID );
- assert ( PointTriangle ( 0, 0,
- -330, 934,
- 701, -548,
- -2185.8, 3601.6 ) == TRIANGLE_INVALID );
- return 0;
- }
- #endif /* __PROGTEST__ */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement