HDU - 1086.You can Solve a Geometry Problem too

    xiaoxiao2021-03-26  38

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086

    考查判断线段相交,今天刚好学习了一下,拿来练练手。

    #include <cstdio> #define MAX 100 + 10 typedef struct { double x; double y; } Node; Node node[MAX]; Node point[MAX]; double Direction( Node pi, Node pj, Node pk ) { return ( pk.x - pi.x ) * ( pj.y - pi.y ) - ( pj.x - pi.x ) * ( pk.y - pi.y ); } bool Segments_X( Node p1, Node p2, Node p3, Node p4 ) { double d1, d2, d3, d4; d1 = Direction( p3, p4, p1 ); d2 = Direction( p3, p4, p2 ); d3 = Direction( p1, p2, p3 ); d4 = Direction( p1, p2, p4 ); if( d1 * d2 <= 0 && d3 * d4 <= 0 ) return true; return false; } int main() { int n; while( 1 ) { scanf( "%d", &n ); if( n == 0 ) break; for( int i = 1; i <= n; i++ ) { scanf( "%lf%lf%lf%lf", &node[i].x, &node[i].y, &point[i].x, &point[i].y ); } int cnt = 0; for( int i = 1; i <= n - 1; i++ ) { for( int j = i + 1; j <= n; j++ ) { if( Segments_X( node[i], point[i], node[j], point[j] ) ) cnt++; } } printf( "%d\n", cnt ); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-658384.html

    最新回复(0)