資源簡介
求空間兩直線交點-MATLAB代碼+原理說明
原理.pdf —— 說明性文檔
main_demo.m —— demo主程序,也就是一個示例
Intersection_of_TwoLines.m —— 求交點的函數

代碼片段和文件信息
function?[exist_flagIntersection]?=?Intersection_of_TwoLines(?ABCD)
%?本函數功能:求由?A?B構成的直線、C?D構成的直線的交點
%?A?B?C?D都是三維行向量,各自表示三維空間中的點
%??exist_flag?=?0代表無交點?
%??exist_flag?=?1代表有且僅有一個交點??
%??exist_flag?=?-1代表有無數交點
%??Intersection代表求得的交點坐標,為三維行向量
%??exist_flag?=?0時,?雖然說明無交點,但還是令Intersection?=?[0?0?0],使得本函數有輸出
%??exist_flag?=?-1時,?雖然說明有無數交點,但還是令Intersection?=?A,即默認A就是交點
x1?=?A(1);
y1?=?A(2);
z1?=?A(3);
x2?=?B(1);
y2?=?B(2);
z2?=?B(3);
x3?=?C(1);
y3?=?C(2);
z3?=?C(3);
x4?=?D(1);
y4?=?D(2);
z4?=?D(3);
M?=?[x2-x1?x3-x4;y2-y1?y3-y4;z2-z1?z3-z4];
N?=?[x3-x1;y3-y1;z3-z1];
exist_flag?=?0;
????switch?rank(M)
????????case?2
????????????%?如果M的秩為2,先找到M中的兩行,這兩行構成的矩陣依舊秩為2
????????????for?i?=?1:3
????????????????switch?i
????????????????????case?1
????????????????????????%?如果這兩行構成的矩陣依舊秩為2,則計算lemda
????????????????????????if?rank(M([23]:))?==?2
????????????????????????????lemda?=?M([23]:)\N([23]:);
????????????????????????????
????????????????????????????%???如果滿足?M*lemda?=?N,則說明找到唯一的交點了
????????????????????????????if?max(abs(M*lemda?-?N))?1e-3
????????????????????????????????exist_flag?=?1;
????????????????????????????????Intersection?=?A?+?lemda(1)*(B-A);
????????????????????????????????break
????????????????????????????
????????????????????????????%???如果不滿足?M*lemda?=?N,則說明不存在交點,可以換成別的兩行
????????????????????????????else
????????????????????????????????continue???????????????????????????????
????????????????????????????end
????????????????????????
????????????????????????%?如果這兩行構成的矩陣依不再為2,則換成別的兩行
????????????????????????else
????????????????????????????continue
????????????????????????end
????????????????????case?2
????????????????????????%?如果這兩行構成的矩陣依舊秩為2,則計算lemda
????????????????????????if?rank(M([13]:))?==?2
????????????????????????????lemda?=?M([13]:)\N([13]:);
????????????????????????????
????????????????????????????%???如果滿足?M*lemda?=?N,則說明找到唯一的交點了
????????????????????????????if?max(abs(M*lemda?-?N))?1e-3
????????????????????????????????exist_flag?=?1;
????????????????????????????????Intersection?=?A?+?lemda(1)*(B-A);
????????????????????????????????break
????????????????????????????
????????????????????????????%???如果不滿足?M*lemda?=?N,則說明不存在交點,可以換成別的兩行
????????????????????????????else
????????????????????????????????continue???????????????????????????????
????????????????????????????end
????????????????????????
????????????????????????%?如果這兩行構成的矩陣不再為2,則換成別的兩行
????????????????????????else
????????????????????????????continue
????????????????????????end
????????????????????case?3
????????????????????????%?如果這兩行構成的矩陣依舊秩為2,則計算lemda
????????????????????????if?rank(M([12]:))?==?2
????????????????????????????lemda?=?M([12]:)\N([12]:);
????????????????????????????
????????????????????????????%???如果滿足?M*lemda?=?N,則說明找到唯一的交點了
????????????????????????????
????????????????????????????if?max(abs(M*lemda?-?N))?1e-3
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4526??2018-08-08?15:38??求空間兩直線交點-代碼+原理說明\Intersection_of_TwoLines.m
?????文件????????384??2018-08-08?15:42??求空間兩直線交點-代碼+原理說明\main_demo.m
?????文件?????216688??2018-08-08?15:48??求空間兩直線交點-代碼+原理說明\原理.pdf
?????目錄??????????0??2018-08-08?15:56??求空間兩直線交點-代碼+原理說明
-----------?---------??----------?-----??----
???????????????221598????????????????????4
- 上一篇:曲線圖片識別程序--matlab
- 下一篇:matlab 博弈論頻譜分配
評論
共有 條評論