zoukankan      html  css  js  c++  java
  • HDU 1086

    判断线段两两相交的个数

    打模板熟练程度++;

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cmath>
     4 using namespace std;
     5 const double EPS = 1e-10;
     6 struct Point 
     7 {
     8     double x,y;
     9     Point(){}
    10     Point(double x1,double y1):x(x1),y(y1) {}
    11 }a[105],b[105];
    12 typedef Point Vect;
    13 Vect operator - (Vect A, Vect B) 
    14 { 
    15     return Vect(A.x - B.x, A.y - B.y); 
    16 }
    17 int dcmp(double x) 
    18 { 
    19     return fabs(x) < EPS ? 0 : (x < 0? -1: 1); 
    20 }
    21 double Cross(Vect A, Vect B) 
    22 { 
    23     return A.x * B.y - A.y * B.x; 
    24 }
    25 double Dot(Vect A, Vect B) 
    26 { 
    27     return A.x * B.x + A.y * B.y; 
    28 }
    29 bool OnSegment(Point p, Point a1, Point a2)
    30 {
    31     return dcmp(Cross(a1 - p, a2 - p)) == 0 && dcmp( Dot(a1 - p, a2 - p) ) <= 0;
    32 }
    33 
    34 bool SegmentIntersection(Point a1, Point a2, Point b1, Point b2)
    35 {
    36     double c1 = Cross(a2 - a1, b1 - a1);
    37     double c2 = Cross(a2 - a1, b2 - a1);
    38     double c3 = Cross(b2 - b1, a1 - b1);
    39     double c4 = Cross(b2 - b1, a2 - b1);
    40     if(dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0) return 1;
    41     else if(OnSegment(b1, a1, a2) ) return 1;
    42     else if(OnSegment(b2, a1, a2) ) return 1;
    43     else if(OnSegment(a1, b1, b2) ) return 1;
    44     else if(OnSegment(a2, b1, b2) ) return 1;
    45     else return 0;
    46 }
    47 
    48 int main()
    49 {
    50     int n;
    51     while(~scanf("%d",&n) && n)
    52     {
    53         for(int i = 1; i <= n; i++)
    54             scanf("%lf%lf%lf%lf", &a[i].x, &a[i].y, &b[i].x, &b[i].y);
    55         int ans = 0;
    56         for(int i = 1; i <= n; i++)
    57             for(int j = i + 1; j <= n; j++)
    58                 if(SegmentIntersection(a[i], b[i], a[j], b[j]))
    59                     ans++;
    60         printf("%d
    ", ans);
    61     }
    62 } 
    我自倾杯,君且随意
  • 相关阅读:
    最深叶节点的最近公共祖先
    ML-Agents(十)Crawler
    ML-Agents(九)Wall Jump
    ML-Agents(八)PushBlock
    ML-Agents(七)训练指令与训练配置文件
    Unity Editor扩展编辑器中显示脚本属性
    ML-Agents(六)Tennis
    数据结构(二)—栈
    ML-Agents(五)GridWorld
    ML-Agents(四)3DBall补充の引入泛化
  • 原文地址:https://www.cnblogs.com/nicetomeetu/p/5712878.html
Copyright © 2011-2022 走看看