• 向量叉积判断两线段是否相交


    判断两直线p1p2与q1q2是否相交,用向量叉积来判断

    如果P x Q >0,则P在Q的顺时针方向;

    如果P x Q <0,则P在Q的逆时针方向;

    如果P x Q=0,则P与Q共线,可能同向也可能反向

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>
    
    typedef struct node
    {
        double x,y;
    }point;
    
    point p1,p2,q1,q2;
    double result1,result2;
    
    double crossProduct(point a,point b1,point b2)
    {
        double x1,y1,x2,y2;
        x1=a.x-b1.x;
        y1=a.y-b1.y;
        x2=b2.x-b1.x;
        y2=b2.y-b1.y;
        return x1*y2-x2*y1;
    }
    
    int main()
    {
        while(1)
        {
            scanf("%lf%lf",&p1.x,&p1.y);
            scanf("%lf%lf",&p2.x,&p2.y);
            scanf("%lf%lf",&q1.x,&q1.y);
            scanf("%lf%lf",&q2.x,&q2.y);
    
            result1=crossProduct(p1,q1,q2);//注意向量顺序
            result2=crossProduct(p2,q2,q1);
            printf("%lf  %lf
    ",result1,result2);
    
            if(result1*result2>=0)printf("YES
    ");//如果叉乘大于0则相交
            else printf("NO
    ");
        }
        return 0;
    }
    View Code

    转自:http://www.cnblogs.com/ysh-blog/archive/2012/07/10/2583905.html

  • 相关阅读:
    docker使用
    centerpoint模型说明
    python 类:专有方法(魔法方法)
    安装vs2015 windows10 报错
    ubuntu 配置ssh(docker)
    conda、pip如何直接在其他用户下直接运行
    NVIDIA apex安装
    mybatis缓存
    如何简单理解HTTPS
    主板
  • 原文地址:https://www.cnblogs.com/ccccnzb/p/3854234.html
Copyright © 2020-2023  润新知