hdoj1086 You can Solve a Geometry Problem too

#include < iostream >
#include
< stdio.h >
using   namespace  std;
int  n;
typedef 
struct  {         // 定义点
     double  x, y;
} point;
struct  segment {
    point fir, end;
};
segment pnt[
100 ];
bool  inter(point  &  a, point  &  b, point  &  c, point  &  d)
{
    
if  (min(a.x, b.x)  >  max(c.x, d.x)  ||  min(a.y, b.y)  >  max(c.y, d.y)  ||
    min(c.x, d.x) 
>  max(a.x, b.x)  ||  min(c.y, d.y)  >  max(a.y, b.y))
    
return   0 ;
    
double  h, i, j, k;
    h 
=  (b.x  -  a.x)  *  (c.y  -  a.y)  -  (b.y  -  a.y)  *  (c.x  -  a.x);
    i 
=  (b.x  -  a.x)  *  (d.y  -  a.y)  -  (b.y  -  a.y)  *  (d.x  -  a.x);
    j 
=  (d.x  -  c.x)  *  (a.y  -  c.y)  -  (d.y  -  c.y)  *  (a.x  -  c.x);
    k 
=  (d.x  -  c.x)  *  (b.y  -  c.y)  -  (d.y  -  c.y)  *  (b.x  -  c.x);
    
return  h  *  i  <=   0.0000000001   &&  j  *  k  <=   0.0000000001 ;
}

int  main()
{
    
while  (scanf( " %d " & n)  !=  EOF  &&  n) {
    
int  sum  =   0 ;
    
for  ( int  i  =   0 ; i  <  n;  ++ i) {
        scanf(
" %lf%lf%lf%lf " & pnt[i].fir.x,  & pnt[i].fir.y,
          
& pnt[i].end.x,  & pnt[i].end.y);
    }
    
for  ( int  i  =   0 ; i  <  n;  ++ i) {
        
for  ( int  j  =  i  +   1 ; j  <  n;  ++ j) {
        
if  (inter(pnt[i].fir, pnt[i].end, pnt[j].fir, pnt[j].end))
            sum
++ ;
        }
    }
    printf(
" %d\n " , sum);
    }
}


转载于:https://www.cnblogs.com/Open_Source/archive/2010/05/07/1904960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值