zoukankan      html  css  js  c++  java
  • ZOJ 1280 Interesting Lines | 求两直线交点

    原题:

    求两直线交点


    思路借鉴于:http://blog.csdn.net/zxy_snow/article/details/6341282

    感谢大佬

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define eps 1e-8
    using namespace std;
    int T;
    struct point//点(向量的结构体)
    {
        double x,y;
        point() {}//初始化
        point (int _x,int _y) :
    	x(_x),y(_y) {};//用一对坐标初始化点
        inline point operator + (const point &rhs) const//向量加法
    	{
    	    return point(x+rhs.x,y+rhs.y);
    	}
        inline point operator - (const point &rhs) const//向量减法
    	{
    	    return point(x-rhs.x,y-rhs.y);
    	}
        inline int operator * (const point &rhs) const//向量叉乘
    //向量叉乘的几何意义是以两个向量为邻边的平行四边形的有向面积 也就是|a|*|b|*sin<a,b> 这里的sin<a,b>决定了
    //如果a,b是逆时针的,那么sin<a,b>大于0,有向面积大于0,反之<0 
    	{
    	    return x*rhs.y-y*rhs.x;
    	}
        friend inline int dot(const point &lhs,const point &rhs)//向量点乘
    	{
    	    return lhs.x*rhs.x+lhs.y*rhs.y;
    	}
    }p1,p2,p3,p4;
    inline bool check(const point &p1,const point &p2,const point &p3)
    {
        if (abs((p1-p3)*(p2-p3))<eps) return 1;
        return 0;
    }
    double abs(double x)
    {
        return x>0?x:-x;
    }
    int main()
    {
        scanf("%d",&T);
        puts("INTERSECTING LINES OUTPUT");
        while (T--)
        {
    	scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y);
    	if (check(p1,p2,p3) && check(p1,p2,p4))
    	{
    	    puts("LINE");
    	    continue;
    	}
    	if (abs((p2.x-p1.x)*(p4.y-p3.y)-(p4.x-p3.x)*(p2.y-p1.y))<eps)
    	{
    	    puts("NONE");
    	    continue;
    	}
    	double a1=(p1.y-p2.y),b1=(p2.x-p1.x),c1=(p1.x*p2.y-p2.x*p1.y);
    	double a2=(p3.y-p4.y),b2=(p4.x-p3.x),c2=(p3.x*p4.y-p4.x*p3.y);
    	printf("POINT %.2f %.2f
    ",(c1*b2-c2*b1)/(a2*b1-a1*b2),(a2*c1-a1*c2)/(a1*b2-a2*b1));
        }
        puts("END OF OUTPUT");
        return 0;
    }
    
  • 相关阅读:
    <a>元素生成多个<a>的问题,元素标签结尾影响
    mysql不能插入中文数据
    java: Multiple encodings set for module chunk test "GBK" will be used by compiler
    过滤器第二篇【高级应用】
    过滤器第一篇【介绍、入门、简单应用】
    客户关系管理系统
    Mysql中文乱码
    用户登陆注册【JDBC版】
    Mysql的基本命令图
    购物车小案例【简单版】
  • 原文地址:https://www.cnblogs.com/mrsheep/p/7999320.html
Copyright © 2011-2022 走看看