對於幾何關係的計算,兩點確定一條直線,兩直線的交點的計算經常見到。最簡單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