二維平面內兩直線交點計算

	對於幾何關係的計算,兩點確定一條直線,兩直線的交點的計算經常見到。最簡單matlab編程方法是通過兩點列出直線方程,使用matlab工具解方程。
	但是計算時發現速度較爲緩慢。

表達式定義

空間直線的表達式有多種,比如一般式Ax+By+C=0、點斜式y-y0=k(x-x0)、截距式x/a+y/b=1、兩點式:(y-y1)/(y1-y2)=(x-x1)/(x1-x2)等。
  一般式不需要單獨做處理和判斷,所以在計算機領域處理二維圖像數據中一般式用的最多。
  已知直線上的兩點P1(X1,Y1)和P2(X2,Y2),P1和P2兩點不重合,對於AX+BY+C=0,則有:

A=Y2-Y1
B=X1-X2
C=X2Y1-X1Y2

matlab程序

function P = LineIntersectionPoint2D(A, B, C, D)
%LineIntersectionPoint2D
%求平面內兩直線AB和CD的交點
% http://www.cnblogs.com/DHUtoBUAA/

x1 = A(1);
y1 = A(2);
x2 = B(1);
y2 = B(2);
x3 = C(1);
y3 = C(2);
x4 = D(1);
y4 = D(2);
[A1, B1, C1] = GeneralEquation(x1,y1,x2,y2);
[A2, B2, C2] = GeneralEquation(x3,y3,x4,y4);
m=A1*B2-A2*B1;
if m==0
        disp('無交點!');
        P = -1; 
else
        x=(C2*B1-C1*B2)/m;
        y=(C1*A2-C2*A1)/m;
        P = [x, y];
end
end
%%%%%%%%%%%%%%%%%%
function [A,B,C] = GeneralEquation(first_x,first_y,second_x,second_y)
    %一般式 Ax+By+C=0
    % from http://www.cnblogs.com/DHUtoBUAA/
    A=second_y-first_y;
    B=first_x-second_x;
    C=second_x*first_y-first_x*second_y;
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章