POJ1269(模拟题)

http://poj.org/problem?id=1269

题意:输入两组点,一组两个,判断是不是平行,相交,重合;

AC代码(有点啰嗦但挺好理解):

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    float x1,x2,x3,x4,y1,y2,y3,y4;
    float k1,k2,b1,b2,c1,c2;
    float x,y;
    int flag1,flag2;
    scanf("%d",&n);
    printf("INTERSECTING LINES OUTPUT\n");
    while(n--)
    {
        flag1=0;
        flag2=0;
        scanf("%f%f%f%f%f%f%f%f",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        if(x1==x2)
        {
            c1=x1;
            flag1=1;
        }
        else
        {
            k1=(y1-y2)/(x1-x2);
            b1=y1-x1*k1;
        }
        if(x3==x4)
        {
            c2=x3;
            flag2=1;
        }
        else
        {
            k2=(y3-y4)/(x3-x4);
            b2=y3-x3*k2;
        }
        if(flag1==1&&flag2==1)
        {
            if(c1==c2)
                printf("LINE\n");
            else printf("NONE\n");
        }
        else if(flag1==1&&flag2==0)
        {
            x=c1;
            y=k2*x+b2;
            printf("POINT %.2f %.2f\n",x,y);
        }
        else if(flag1==0&&flag2==1)
        {
            x=c2;
            y=k1*x+b1;
            printf("POINT %.2f %.2f\n",x,y);
        }
        else
        {
            if(k1==k2&&b1==b2)
                printf("LINE\n");
            else if(k1==k2&&b1!=b2)
                printf("NONE\n");
            else
            {
                x=(b2-b1)/(k1-k2);
                y=k1*x+b1;
                printf("POINT %.2f %.2f\n",x,y);
            }
        }
    }
    printf("END OF OUTPUT\n");
    return 0;
}

 

posted @ 2013-08-06 14:51  拼搏今朝 努力奋进  阅读(191)  评论(0)    收藏  举报