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中Objenesis库简单使用
    java魔法类之ReflectionFactory介绍
    求与一个数最接近的2的N次幂
    java魔法类之Unsafe介绍
    java中如何通过程序检测线程死锁
    jQuery.fullpage自定义高度(demo详解)
    angular diretive中 compile controller link的区分及编译顺序
    div水平垂直居中的几种方法(面试问题)
    angular 双ng-repeat显示隐藏
    快速应用rem
  • 原文地址:https://www.cnblogs.com/wantnon/p/6384543.html
Copyright © 2011-2022 走看看