基於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 不平行 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個...