• 大小: 208KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: MATLAB  几何  

资源简介

求空间两直线交点-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


评论

共有 条评论