zoukankan      html  css  js  c++  java
  • 求直线与线段的交点

    1,求点到直线的带符号距离:

    float getSignedDistance(点P,直线AB)

    //求点P到直线AB的带符号距离(当P在AB左侧时距离为正,右侧时为负)

    {

      dir=直线AB的方向向量

      根据dir求出直线AB的左手法线向量leftNormal = (-dir.y,dir.x).normalized

      线段AP在leftNormal上的投影即为P到直线AB的带符号距离:

      signedDistance=dot(AP,leftNormal);

      return signedDistance;

    }

    2,求直线与线段的交点:

    vector2 getIntersectPoint(直线PQ,段线AB)//求直线PQ与线段AB的交点
    

    {

        求A到直线PQ的带符号距离d1
            d1=getSignedDistance(A,直线PQ);

        求B到直线PQ的带符号距离d2
            d2=getSignedDistance(B,直线PQ);
            if(d1与d2异号或其中至少有一个为0){//交点存在,假设交点为M

        求A到直线PQ的距离
                D1=|d1|

        求B到直线PQ的距离
                D2=|d2|
                if(D1+D2!=0){

           求线段AM占段线AB的比例k
                    k=D1/(D1+D2);
                }else{//D1+D2==0,即D1和D2均为0,也就是说段线AB与直线PQ重合
                    k=0.5;//线段AM占线段AB的比例可以是0到1的任意数,就当他是0.5吧!    
                }
                有了线段AM点AB的比例k,就可以求出M了:
          

         M = A + (B - A) * k;

    
            return Mid;


            }  else {//交点不存在
 

                return 交点不存在
  

        }


    }

  • 相关阅读:
    高数基础
    java.io.FileNotFoundException: [WEB-INF/spring-servlet.xml] cannot be opened because it does not exist
    HBase1.0.0 实现数据增删查
    cm 安装cdh 后添加hive服务
    HBase启动错误提示别的机器60000已经存在
    CM集群管理
    CM 安装CDH 错误: 安装失败。 无法接收 Agent 发出的检测信号。
    Js运动框架
    单片机DA转换实现正弦波
    怎样让树莓派接移动硬盘
  • 原文地址:https://www.cnblogs.com/wantnon/p/6384543.html
Copyright © 2011-2022 走看看