c#求2直線的交點坐標


1.原理,直線上的一小段線段(起點到交叉點)的斜率=整個直線的斜率

 

 

x1,y1  x2,y2為一條直線起止點坐標

x3,y3  x4,y4為另一條直線起止坐標

設交點坐標為x,y 根據原理可得二元一次方程組

經過變化求得

x=(a*x1 - y1 + y3 - b*x3) / (a - b);  

y= a * x - a * x1 + y1;

 

注意:

需考慮右側等式分母為0的情況,即L1或L2垂直於x軸時,斜率不存在的情況

 

 

 

 

2.代碼實現

 

 double[] GetIntersectionPoint(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4)
        {
            var a = (y2 - y1) / (x2 - x1); //需考慮分母不能為0 即x2=x1 l1垂直於x軸
            var b = (y4 - y3) / (x4 - x3); //需考慮分母不能為0 即x4=x3 l2垂直於x軸
             

            if (a == b)
            {//斜率相同,說明平行 無交點
                throw new Exception("兩直線平行,無交點");
            }

            double x, y = 0;

            if (x2==x1)
            {//L1垂直於x軸  則x=x1=x2 a=infinity 想辦法消除a
                x = x1;
                ////(y-y3)/(x-x3)=b 且x=x1 變換得y=bx1-bx3+y3
                y = b*x1 - b*x3 + y3;
                return new double[] { x, y };
            }
            if (x4==x3)
            {//L2垂直於x軸 則x=x3=x4 b=infinity 
                x = x3;
                y = a * x - a * x1 + y1;
                return new double[] { x, y };
            }
            
            x = (a*x1 - y1 + y3 - b*x3) / (a - b);
            y = a * x - a * x1 + y1;

            Log("[{lng:'"+x1+"',lat:'"+y1+"'},{lng:'"+x2+"',lat:'"+y2+"'},{lng:'"+x3+"',lat:'"+y3+"'},{lng:'"+x4+"',lat:'"+y4+"'},{lng:'"+x+"',lat:'"+y+"'}]");

            return new double[] { x, y };
        }

 

From:https://www.cnblogs.com/xuejianxiyang/p/13821788.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM