zoukankan      html  css  js  c++  java
  • 关于直线与线段

    求直线与线段的交点

    求交点

    定比分点法,用叉积求面积,用面积比代替线段长度比

    Point inter_point(Point A,Point B,Point C,Point D)///返回直线AB和线段CD的交点
    {
        if(!intersect(A,B,C,D)) return {-INF*1.0,0};///判断直线AB是否与线段CD相交,不相交必须须特判
        double area1=fabs((B-A)*(C-A));
        double area2=fabs((B-A)*(D-A));
        double x=(area1*D.x+area2*C.x)/(area1+area2);
        double y=(area1*D.y+area2*C.y)/(area1+area2);
        return {x,y};
    }
    View Code

    判断相交,叉积判断左右拐(跨立实验)

    bool intersect(Point A,Point B,Point C,Point D)///判断直线AB是否与线段CD相交
    {
        if(((C-A)*(B-A))*((D-A)*(B-A))<eps) return true;
        return false;
    }
    View Code

    如果判断线段相交则须用快速排除实验和跨立实验

    求线段交点必须先判断相交

    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    NOIP 2008 立体图
    JDOJ 1606 数字三角形
    JDOJ 1133 分段公司利润
    NOIP 2011 选择客栈
    NOIP 2014 无线网络发射器选址
    USACO Party Invitations
    NOI 2001 食物链
    NOI 2002 银河英雄传说
    BOI 2003 团伙
    NOIP 2017 奶酪
  • 原文地址:https://www.cnblogs.com/--560/p/4387900.html
Copyright © 2011-2022 走看看