求两条直线的交点(附MATLAB完整代码) | 您所在的位置:网站首页 › 求两直线的交点坐标与方程X1 › 求两条直线的交点(附MATLAB完整代码) |
求两条直线的交点,可以使用以下方法: 设两条直线的一般方程为: 直线1: a1x + b1y + c1 = 0 直线2: a2x + b2y + c2 = 0 消元x和y,可以得到: a1x + b1y + c1 = 0 a2x + b2y + c2 = 0 => a1x + b1(−a2/b2)x - c2/b2 + c1 = 0 => x(a1 + b1(-a2/b2)) = c2/b2 - c1 解出x和y: x = (c2/b2 - c1) / (a1 + b1(-a2/b2)) 将x代入任一直线方程解出y 所以交点为: X = (c2/b2 - c1) / (a1 + b1(-a2/b2)) Y = (−b1/a1)X - c1/a1 MATLAB代码如下: main.m主程序: %% 求两条直线的交点 clc;clear all;close all; %% (1)设置数据 Line1Node1=[0.5,3];%直线1的第1个点[x11,y11] Line1Node2=[3,0];%直线1的第2个点[x12,y12] Line2Node1=[1,0.1];%直线2的第1个点[x21,y21] Line2Node2=[4,4];%直线2的第2个点[x22,y22] %% (2)调用计算交点的函数进行计算 [crossX,crossY]= LinesIntersection( Line1Node1,Line1Node2,Line2Node1,Line2Node2 );%调用计算交点的函数进行计算 %% (3)输出交点 crossX crossY 子函数LinesIntersection代码: function [crossX,crossY]= LinesIntersection( Line1Node1,Line1Node2,Line2Node1,Line2Node2) %% 计算交点的函数 %% 输入数模 % Line1Node1=[0.5,3];%直线1的第1个点 % Line1Node2=[3,0];%直线1的第2个点 % Line2Node1=[1,0.1];%直线2的第1个点 % Line2Node2=[4,4];%直线2的第2个点 %% 输出数据 % crossX=交点x坐标 % crossY=交点y坐标 if Line1Node1(1)==Line1Node2(1)%% 直线1 斜率为无穷大的情况 Slope2=(Line2Node2(2)-Line2Node1(2))/(Line2Node2(1)-Line2Node1(1)); b2=Line2Node1(2)-Slope2*Line2Node1(1); crossX=Line1Node1(1); crossY=Slope2*crossX+b2; elseif Line2Node1(1)==Line2Node2(1)%% 直线2斜率为无穷大的情况 Slope1=(Line1Node2(2)-Line1Node1(2))/(Line1Node2(1)-Line1Node1(1)); b1=Line1Node1(2)-Slope1*Line1Node1(1); crossX=Line2Node1(1); crossY=Slope1*crossX+b1; else %% 其他情况:(Line1Node1(1)~=Line1Node2(1)) && (Line2Node1(1)~=Line2Node2(1))% Slope1=(Line1Node2(2)-Line1Node1(2))/(Line1Node2(1)-Line1Node1(1)); Slope2=(Line2Node2(2)-Line2Node1(2))/(Line2Node2(1)-Line2Node1(1)); b1=Line1Node1(2)-Slope1*Line1Node1(1); b2=Line2Node1(2)-Slope2*Line2Node1(1); if Slope1==Slope2%如果平行,无交点 crossX='平行无交点'; crossY='平行无交点'; else crossX=(b2-b1)/(Slope1-Slope2);%根据斜率和截距计算交点的x值 crossY=Slope1*crossX+b1;%根据斜率和截距计算交点的y值 end end 程序运行结果: |
CopyRight 2018-2019 实验室设备网 版权所有 |