• [线段相交] 0807


    模版,注意使用int可能在求叉乘的过程中溢出,解决办法:使用double(使用int在在返回时只返回符号有时也可以);

    使用double的:

    # include <cmath>
    
    const double eps = 1e-8;
    
    struct Point{double x, y;} ;
    
    int dcmp(double x)
    {
        if (fabs(x) < eps) return 0;
        return x>0 ? 1:-1;
    }
    
    int direction(Point p1, Point p2, Point p3)
    {
        double tmp = (p3.x-p1.x)*(p2.y-p1.y) - (p2.x-p1.x)*(p3.y-p1.y);
        return dcmp(tmp);
    }
    
    char isCross(Point p1, Point p2, Point p3, Point p4)
    {
        int d1 = direction(p3, p4, p1);
        int d2 = direction(p3, p4, p2);
        int d3 = direction(p1, p2, p3);
        int d4 = direction(p1, p2, p4);
        if (d1*d2 < 0 && d3*d4 < 0) return 1;
        return 0;
    }

    使用int返回符号的:

    struct Point{int x, y;} ;
      
    int direction(Point p1, Point p2, Point p3)
    {
        int tmp = (p3.x-p1.x)*(p2.y-p1.y) - (p2.x-p1.x)*(p3.y-p1.y);
        if (tmp == 0) return 0;
        return tmp>0 ? 1:-1;
    }
      
    char isCross(Point p1, Point p2, Point p3, Point p4)
    {
        int d1 = direction(p3, p4, p1);
        int d2 = direction(p3, p4, p2);
        int d3 = direction(p1, p2, p3);
        int d4 = direction(p1, p2, p4);
        if (d1*d2 < 0 && d3*d4 < 0) return 1;
        return 0;
    }
  • 相关阅读:
    员工看公司
    Java多线程
    Intellij热部署插件JRebel的详细配置及图解
    Java并发处理锁 Lock
    Java8 Stream
    Eclipse下Maven安装和配置
    IntelliJ IDEA 部署Tomcat及创建一个web工程
    IntelliJ IDEA 下搭建vue项目工程
    Vue Router路由管理器介绍
    用WebStorm搭建vue项目
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2626112.html
Copyright © 2020-2023  润新知