zoukankan      html  css  js  c++  java
  • POJ 1269 Intersecting Lines

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

    两条直线,平行输出NONE,共线输出LINE,相交输出交点坐标

    p0为交点,求交点坐标的方法是(p1-p0)X(p2-p0)=0 &&  (p3-p0)X(p4-p0)=0(其中X代表向量叉乘),联立两个方程可求解

    求得解分母为0时,判断一条直线中的一个点是否在另一条直线上(用上面叉乘的方法),如果是就共线,反之平行

    View Code
    #include <iostream>
    #include <stdio.h>
    using namespace std ;
    struct point{
        int x,y ;
    } ;
    int main()
    {
        int n ;
        while(~scanf("%d",&n))
        {
            puts("INTERSECTING LINES OUTPUT") ;
            point p1,p2,p3,p4 ;
            for(int i=0;i<n;i++)
            {
                scanf("%d%d%d%d%d%d%d%d",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y) ;
                if((((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x))==0 || ((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x))==0) && ((p3.y-p4.y)*p1.x+(p4.x-p3.x)*p1.y+p3.x*p4.y-p4.x*p3.y==0))
                {
                    puts("LINE") ;
                    continue ;
                }
                if(((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x))==0 || ((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x))==0)
                {
                    puts("NONE") ;
                    continue ;
                }
                double x0=((p1.x*p2.y-p2.x*p1.y)*(p4.x-p3.x)-(p3.x*p4.y-p4.x*p3.y)*(p2.x-p1.x))*1.0/((p3.y-p4.y)*(p2.x-p1.x)-(p1.y-p2.y)*(p4.x-p3.x)) ;
                double y0=((p3.y-p4.y)*(p1.x*p2.y-p2.x*p1.y)-(p1.y-p2.y)*(p3.x*p4.y-p4.x*p3.y))*1.0/((p1.y-p2.y)*(p4.x-p3.x)-(p3.y-p4.y)*(p2.x-p1.x)) ;
                printf("POINT %.2lf %.2lf\n",x0,y0) ;
            }
            puts("END OF OUTPUT") ;
        }
        return 0 ;
    }
  • 相关阅读:
    偏函数
    装饰器
    排序
    匿名函数
    参数传递
    pass语句
    不定长函数
    通用函数
    不定长参数(元祖)
    不定长参数(字典)
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2621339.html
Copyright © 2011-2022 走看看