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 交点不存在
  

        }


    }

  • 相关阅读:
    团队冲刺2---个人工作总结八(6.1)
    团队冲刺2---个人工作总结七(5.31)
    opencv2 用imwrite 抽取并保存视频图像帧
    VMware 虚拟机CentOS 7 网路连接配置 无eth0简单解决办法
    个人总结
    人月神话阅读笔记03
    个人冲刺10
    人月神话阅读笔记02
    第十六周学习进度情况
    个人冲刺09
  • 原文地址:https://www.cnblogs.com/wantnon/p/6384543.html
Copyright © 2011-2022 走看看