hdu1086(规范相交模版题)

#include <iostream>
#include <stdio.h>

using namespace std;

typedef struct node
{
    double x;
    double y;
}point;
typedef struct ed
{
    point a;
    point b;
    int is_top;
}edge;
edge e[100005];

point make_e(point x,point y)
{
    point a;
    a.x = x.x - y.x;
    a.y = x.y - y.y;
    return a;
}

double cha(point x,point y)
{
    return x.x*y.y - y.x*x.y;
}

double cross(edge a,point c)
{
    point e1,e2;
    e1 = make_e(a.a,c);
    e2 = make_e(a.a,a.b);
    return cha(e2,e1);
}

int main()
{
    int n,i,j;
    while(scanf("%d",&n)&&n)
    {
        for(i = 0;i < n;i++)
        scanf("%lf %lf %lf %lf",&e[i].a.x,&e[i].a.y,&e[i].b.x,&e[i].b.y),e[i].is_top = 0;
        int count = 0;
        for(i = 0;i < n;i++)
        {
            for(j = i+1;j < n;j++)
            {
                if(i != j)
                {
                    if(cross(e[i],e[j].a)*cross(e[i],e[j].b) <= 0 && cross(e[j],e[i].a)*cross(e[j],e[i].b) <= 0)
                    count++;
                }
            }
        }
               printf("%d\n",count);

    }
    return 0;
}

pc代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int N=102;
double eps=0.0000000001;

struct node
{
    double x,y;
}sh[N],se[N];
int n;

double jud(node a,node b,node c)
{
    return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}
bool cross(int i,int j)
{
    double k1=jud(sh[i],se[i],sh[j]);
    double k2=jud(sh[i],se[i],se[j]);
    double k3=jud(sh[j],se[j],sh[i]);
    double k4=jud(sh[j],se[j],se[i]);
    if(k1*k2<eps&&k3*k4<eps)return true;
    return false;
}

int main()
{
    int i,j,k;
    while(cin>>n,n)
    {
        for(i=0;i<n;i++)
        {
            scanf("%lf %lf %lf %lf",&sh[i].x,&sh[i].y,&se[i].x,&se[i].y);
        }
        int ans=0;
        for(i=0;i<n-1;i++)
        {
            for(j=i+1;j<n;j++)
            {
                if(cross(i,j))ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/0803yijia/p/2640220.html