给出线段求交点个数
可以作为模板了
//
// main.cpp
// 7.1
//
// Created by Mr.Xue on 17/7/18.
// Copyright © 2017年 Mr.Xue. All rights reserved.
//
#include <iostream>
using namespace std;
typedef struct
{
double x,y;
}POINT;
double Multiply(POINT p1 , POINT p2 , POINT p3)
{
return ( (p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x) ) ;
}
int segments(POINT s1,POINT e1,POINT s2,POINT e2)
{
double d1,d2,d3,d4;
d1=Multiply(s1,e1,s2);
d2=Multiply(s1,e1,e2);
d3=Multiply(s2,e2,s1);
d4=Multiply(s2,e2,e1);
if(d1*d2<=0&&d3*d4<=0)
return 1;
return 0;
}
int main()
{
int n,sum;
POINT st[105],ed[105];
while(scanf("%d",&n)&&n!=0)
{
for(int i=0;i<n;i++)
{
scanf("%lf %lf %lf %lf",&st[i].x,&st[i].y,&ed[i].x,&ed[i].y);
}
sum=0;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(segments(st[i],ed[i],st[j],ed[j])==1)
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}