程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> POJ 1269 Intersecting Lines

POJ 1269 Intersecting Lines

編輯:關於C++

本題就是判斷直線之間的關系,我的思想就是先判斷是否共線,然後判斷是否平行,剩下的肯定相交,直接求交點就可以了。在判斷平行的時候只要看兩者的斜率是否相等就可以了,因為在判斷平行之前已經判斷是否共線,所以只要斜率相等,肯定就是平行了。求交點的時候就是用的數學方法,注意斜率不存在的情況就可以了。

#include
#include
#include
#include
using namespace std;
struct point
{
    int x,y;
};
struct line
{
    point s,e;
};
int cross(point p1,point p2,point p3)
{
    int x1=p2.x-p1.x,x2=p3.x-p1.x;
    int y1=p2.y-p1.y,y2=p3.y-p1.y;
    return x1*y2-x2*y1;
}
int isline(line l1,line l2)//是否共線
{
    int a=cross(l1.s,l2.s,l2.e);
    int b=cross(l1.e,l2.s,l2.e);
    if(a==0&&b==0)
        return 1;
    return 0;
}
int isparallel(line l1,line l2)//是否平行
{
    int x1=l1.s.x-l1.e.x,y1=l1.s.y-l1.e.y;
    int x2=l2.s.x-l2.e.x,y2=l2.s.y-l2.e.y;
    if(x1*y2-x2*y1==0)
        return 1;
    return 0;
}
void get_point(line l1,line l2)//求交點
{
    double x,y;
    if(l1.s.x==l1.e.x)//斜率不存在的情況要討論
    {
        double k2=(l2.s.y-l2.e.y)*1.0/(l2.s.x-l2.e.x);
        double b2=l2.s.y*1.0-k2*l2.s.x;
        y=k2*l1.s.x+b2;
        printf("POINT %.2lf %.2lf\n",(double)l1.s.x,y);
        return;
    }
    if(l2.s.x==l2.e.x)
    {
        double k1=(l1.s.y-l1.e.y)*1.0/(l1.s.x-l1.e.x);
        double b1=l1.s.y*1.0-k1*l1.s.x;
        y=k1*l2.s.x+b1;
        printf("POINT %.2lf %.2lf\n",(double)l2.s.x,y);
        return;
    }
    double k1=(l1.s.y-l1.e.y)*1.0/(l1.s.x-l1.e.x);
    double b1=l1.s.y*1.0-k1*l1.s.x;
    double k2=(l2.s.y-l2.e.y)*1.0/(l2.s.x-l2.e.x);
    double b2=l2.s.y*1.0-k2*l2.s.x;
    x=(b2-b1)/(k1-k2);
    y=k1*x+b1;
    printf("POINT %.2lf %.2lf\n",x,y);
}
int main()
{
    int n,x1,y1,x2,y2,x3,y3,x4,y4;
    scanf("%d",&n);
    printf("INTERSECTING LINES OUTPUT\n");
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
        line l1,l2;
        l1.s.x=x1,l1.s.y=y1,l1.e.x=x2,l1.e.y=y2;
        l2.s.x=x3,l2.s.y=y3,l2.e.x=x4,l2.e.y=y4;
        if(isline(l1,l2)==1)
        {
            printf("LINE\n");
            continue;
        }
        if(isparallel(l1,l2)==1)
        {
            printf("NONE\n");
            continue;
        }
        get_point(l1,l2);
    }
    printf("END OF OUTPUT\n");
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved