zoukankan      html  css  js  c++  java
  • HDU1086+几何+判断线段相交

    详见代码

    View Code
     1 /*
     2 几何+线段相交
     3 */
     4 #include<stdio.h>
     5 #include<string.h>
     6 #include<stdlib.h>
     7 #include<algorithm>
     8 #include<iostream>
     9 #include<queue>
    10 //#include<map>
    11 #include<math.h>
    12 using namespace std;
    13 typedef long long ll;
    14 //typedef __int64 int64;
    15 const int maxn = 105;
    16 const int inf = 0x7fffffff;
    17 const double pi=acos(-1.0);
    18 const double eps = 1e-8;
    19 struct point {
    20     double x,y;
    21 };
    22 struct line{
    23     point a,b;
    24 };
    25 line myline[ maxn ];
    26 
    27 double xmult( point a,point b,point c ){
    28     return ( a.x-c.x )*( b.y-c.y )-( a.y-c.y )*( b.x-c.x );
    29 }
    30 bool inLine( line now,point p ){
    31     double minx,maxx,miny,maxy;
    32     minx=min( now.a.x,now.b.x );
    33     maxx=max( now.a.x,now.b.x );
    34     miny=min( now.a.y,now.b.y );
    35     maxy=max( now.a.y,now.b.y );
    36     if( p.x>=minx&&p.x<=maxx&&p.y>=miny&&p.y<=maxy )
    37         return true;
    38     else
    39         return false;
    40 }
    41 bool intersect( line one,line two ){
    42     double d1,d2,d3,d4;
    43     d1=xmult( two.a,one.b,one.a );
    44     d2=xmult( two.b,one.b,one.a );
    45     d3=xmult( one.a,two.a,two.b );
    46     d4=xmult( one.b,two.a,two.b );
    47     if( d1*d2<0&&d3*d4<0 )
    48         return true;//相互跨过
    49     if( d1==0&&inLine( one,two.a )==true )
    50         return true;
    51     if( d2==0&&inLine( one,two.b )==true )
    52         return true;
    53     if( d3==0&&inLine( two,one.a )==true )
    54         return true;
    55     if( d4==0&&inLine( two,one.b )==true )
    56         return true;//分别表示某个点在一条直线上的情况
    57     return false;
    58 }
    59 
    60 int main(){
    61     int n;
    62     while( scanf("%d",&n)!=EOF,n ){
    63         for( int i=0;i<n;i++ ){
    64             scanf("%lf%lf%lf%lf",&myline[ i ].a.x,&myline[ i ].a.y,&myline[ i ].b.x,&myline[ i ].b.y);
    65         }
    66         int sum=0;//交点的个数
    67         for( int i=0;i<n;i++ ){
    68             for( int j=i+1;j<n;j++ ){
    69                 if( intersect( myline[ i ],myline[ j ] )==true )
    70                     sum++;
    71             }
    72         }
    73         printf("%d\n",sum);
    74     }
    75     return 0;
    76 }
    keep moving...
  • 相关阅读:
    使用flv.js + websokect播放rtsp格式视频流
    form表单数据回显双向绑定失效的原因
    element UI日期选择器动态切换了type之后布局错乱
    umi+dva+antd+axios搭建项目,跨域代理问题
    浏览器-preview 改写了 response里面的int类型的字段数值
    mac笔记本分辨率为2560*1600,css样式错位问题
    常用的正则表达式
    vue 实现树形结构
    js禁止遮罩层下页面滚动
    ts封装axios
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2969727.html
Copyright © 2011-2022 走看看