計算直線交點與夾角方法

2021-05-24 02:24:08 字數 4109 閱讀 5333

基於matlab求解初等幾何問題

lyqmath

在工程應用、科學計算等領域,計算兩條直線的交點是乙個較為基礎的問題。一般的應該考慮到直線方程的寫法和求解交點的方式。這裡給出乙個具體的處理方式,其基本思想是:首先基於給定的節點定義出直線一般方程,然後求解方程組得到直線方程引數,最後根據得到的兩條直線來求解出交點。因此,問題的輸入為四個已知節點,輸出為由已定節點定義的直線的交點。

已知兩條直線的節點資訊,要求計算出直線的方程與兩直線的交點。採用直線的一般方程形式:

y = ax + by + c

,這裡的a、

b、c就是待求的直線方程引數。

符號變數

%

定義節點資訊

syms

x1y1

x2y2

x3y3

x4y4

%

定義引數資訊

syms ab

c%

定義變數

syms

xy

%%

計算a1,b1,a2,b2

%

直線方程——節點1

eq1 = a*x1 + b*y1 + c;

%

直線方程——節點2

eq2 = a*x2 + b*y2 + c;

%

求解引數

sov1 = solve(eq1, eq2, a, b);

%

直線方程——節點3

eq3 = a*x3 + b*y3 + c;

%

直線方程——節點4

eq4 = a*x4 + b*y4 + c;

%

求解引數

sov2 = solve(eq3, eq4, a, b);

%

求解結果——直線1

a1 = simplify(sov1.a / c);

b1 = simplify(sov1.b / c);

%

求解結果——直線2

a2 = simplify(sov2.a / c);

b2 = simplify(sov2.b / c);

%

求解結果:

% a1 = (y1 - y2)/(x1*y2 - x2*y1);

% b1 = (-x1 + x2)/(x1*y2 - x2*y1);

% a2 = (y3 - y4)/(x3*y4 - x4*y3);

% b2 = (-x3 + x4)/(x3*y4 - x4*y3);

%%

求交點%

直線方程1

eq1 = a1*x + b1*y + 1;

%

直線方程2

eq2 = a2*x + b2*y + 1;

%

求解方程組

sov = solve(eq1, eq2, x, y);

%

顯示求解結果

pretty(eq1)

pretty(eq2)

pretty(sov.x)

pretty(sov.y)

因此,根據輸入的節點資訊,可以得到兩條直線方程與直線的交點公式。注意到

matlab

做符號計算可能耗時較長,這裡根據已有結果編寫計算函式如下。

% 計算直線交點,直線為結構體,內容為兩個節點資訊

p1 = line1.point1; p2 = line1.point2;

% 第1條邊的兩點

p3 = line2.point1; p4 = line2.point2;

% 第2條邊的兩點

x1 = p1(1); y1 = p1(2);

x2 = p2(1); y2 = p2(2);

x3 = p3(1); y3 = p3(2);

x4 = p4(1); y4 = p4(2);

% 計算交點

px = (x1*x3*y2 - x2*x3*y1 - x1*x4*y2 + x2*x4*y1 - x1*x3*y4 + x1*x4*y3 + x2*x3*y4 - x2*x4*y3 )/

...(x1*y3 - x3*y1 - x1*y4 - x2*y3 + x3*y2 + x4*y1 + x2*y4 - x4*y2);

py =(x1*y2*y3 - x2*y1*y3 - x1*y2*y4 + x2*y1*y4 - x3*y1*y4 + x4*y1*y3 + x3*y2*y4 - x4*y2*y3 )/

...(x1*y3 - x3*y1 - x1*y4 - x2*y3 + x3*y2 + x4*y1 + x2*y4 - x4*y2);

根據給定的節點,計算夾角資訊,示意圖如下。已知

x1(x1, y1)

、x2(x2, y2)

、x3(x3, y3)

,計算直線

x2x1

與x2x3

的夾角資訊。

根據向量內積,得到計算公式為:

theta1 = acosd(dot([x1-x2,y1-y2],[x3-x2,y3-y2])/(norm([x1-x2,y1-y2])*norm([x3-x2,y3-y2])));

其中,dot([x1-x2,y1-y2],[x3-x2,y3-y2])

為計算內積,norm([x1-x2,y1-y2])、norm([x3-x2,y3-y2])

為計算向量長度,acosd為計算以度為單位的夾角資訊。

常見的,給定三個節點,要求計算三角形資訊。可以根據本文方法來計算三角形的直線方程與夾角資訊。

基於matlab

求解初等幾何問題,可應用到不同領域作為前期或者後期處理。比如數字影象處理的直線性質分析等。往往直線的夾角資訊等都可以對問題的解決有重要意義。

圓與直線交點

圓與直線交點題目鏈結 include 使用scanf和printf的標頭檔案 include 使用c風格字串函式的標頭檔案 include 使用演算法庫的標頭檔案,max,min,swap,sort等 include 使用cin,cout的標頭檔案 include 數學標頭檔案 include 使用...

python 計算兩直線交點

最近在做影象的透射變換,有乙個關鍵問題就是找到原影象內四邊形的四個頂點。在處理過程中,經過霍夫直線檢測後,即可得到四邊形的四邊。而邊的表示形式為 x1,y1,x2,y2 即以兩點確定一條直線。因此,需要通過編寫乙個函式計算兩直線交點。首先,我們定義 直線l1 x1,y1,x2,y2 直線l2 x3,...

計算直線的交點數

time limit 1 sec memory limit 64 mb submit 820 solved 518 平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...