计算线段交点数量 模板

#include<stdio.h>
#include<math.h>
#include<iostream>
using namespace std;
struct Line
{
    double x1,y1,x2,y2;
}node[11000];
bool solve(Line a,Line b)
{
    if(((a.x1-b.x1)*(a.y2-b.y1)-(a.x2-b.x1)*(a.y1-b.y1))*((a.x1-b.x2)*(a.y2-b.y2)-(a.x2-b.x2)*(a.y1-b.y2))>0)return false;
    if(((b.x1-a.x1)*(b.y2-a.y1)-(b.x2-a.x1)*(b.y1-a.y1))*((b.x1-a.x2)*(b.y2-a.y2)-(b.x2-a.x2)*(b.y1-a.y2))>0)return false;
    return true;
}
int main()
{
    int n;
    while(scanf("%d",&n),n)
    {
        for(int i=0;i<n;i++)scanf("%lf%lf%lf%lf",&node[i].x1,&node[i].y1,&node[i].x2,&node[i].y2);
        int resn=0;
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                if(solve(node[i],node[j]))resn++;
            }
        }
        printf("%d\n",resn);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/MallowFlower/article/details/81565836