基于matlab求解初等几何问题

lyqmath

0 引言

在工程应用、科学计算等领域,计算两条直线的交点是一个较为基础的问题。一般的应该考虑到直线方程的写法和求解交点的方式。这里给出一个具体的处理方式,其基本思想是:首先基于给定的节点定义出直线一般方程,然后求解方程组得到直线方程参数,最后根据得到的两条直线来求解出交点。因此,问题的输入为四个已知节点,输出为由已定节点定义的直线的交点。

1 根据节点计算直线方程并求交点

已知两条直线的节点信息,要求计算出直线的方程与两直线的交点。采用直线的一般方程形式:Y = Ax + By + C,这里的A、B、C就是待求的直线方程参数。

代码

% By lyqmath

% DLUT School of Mathematical Sciences

% BLOG:http://blog.csdn.net/lyqmath

clc; clear all; close all;

%% 符号变量

% 定义节点信息

syms x1 y1 x2 y2 x3 y3 x4 y4

% 定义参数信息

syms A B C

% 定义变量

syms x y

 

%% 计算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做符号计算可能耗时较长,这里根据已有结果编写计算函数如下。

% By lyqmath

% DLUT School of Mathematical Sciences

% BLOG:http://blog.csdn.net/lyqmath

function [px, py] = comput_intersec(line1, line2)

% 计算直线交点,直线为结构体,内容为两个节点信息

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);

2 计算直线夹角

根据给定的节点,计算夹角信息,示意图如下。已知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为计算以度为单位的夹角信息。

3 三角形几何

常见的,给定三个节点,要求计算三角形信息。可以根据本文方法来计算三角形的直线方程与夹角信息。

4 结论

基于matlab求解初等几何问题,可应用到不同领域作为前期或者后期处理。比如数字图像处理的直线性质分析等。往往直线的夹角信息等都可以对问题的解决有重要意义。

欢迎访问我的博客:http://blog.csdn.net/lyqmath

计算直线交点与夹角方法相关推荐

  1. 判断两条直线是否相交c语言,学习OpenCV3:判断两条直线相交,并计算交点和夹角...

    一.问题 已知两条直线 和 ,现希望判断 与 间是否相交.若相交,计算出两条直线的交点和夹角. 二.分析 1.直线方程 的直线方程: 的直线方程: 提示: 和 不能同时为0.若 和 同时为0,起点和终 ...

  2. 一种计算两直线交点的方法

    写在前面: 文章转载请注明出处,谢谢! 对于计算四个点表达的两条直线交点这个问题其实网上相应的代码与数学模型比较好找,所以这里无法保证提供的思路就是最正确或效率最高的,如果能帮助到你那真的是万分荣幸 ...

  3. 工业视觉_57:霍夫(Hough)直线识别,交点与夹角

    /* 工业视觉_57:霍夫(Hough)直线识别,交点与夹角* 工业视觉,目标很明确:快,准,稳. 快:开发快,运行速度快;准:高精度;稳:稳健* 所以,目前"机器换人"项目大多采 ...

  4. 使用C++面向对象思想计算两条直线交点

    使用C++面向对象思想计算两条直线交点 以下是使用C++面向对象思想计算两条直线交点的示例代码: #include <iostream>using namespace std;class ...

  5. C++面向对象思想 两条直线交点计算

    我相信哪怕一点光,也能驱散学习中的迷雾,我在这分享一点自己的挫见 思路: 这题最大的难点就是abc三个常数要怎么去构造,这里需要数学公式去推导,虽然是初中水平,也能体现编程和数学密不可分了.因为我之后 ...

  6. python 计算两直线交点

    最近在做图像的透射变换,有一个关键问题就是找到原图像内四边形的四个顶点. 在处理过程中,经过霍夫直线检测后,即可得到四边形的四边.而边的表示形式为:[x1,y1,x2,y2],即以两点确定一条直线. ...

  7. 两个向量之间的夹角公式_Python 计算任意两向量之间的夹角方法

    如图所示,我们要计算任意两个向量之间的夹角. (图中的坐标数字是估计值,随手给定) python代码如下 import math AB = [1,-3,5,-1] CD = [4,1,4.5,4.5] ...

  8. 计算直线和平面的交点

    平面的法向量N和平面上点P1可以确定一个平面 直线的方向向量N1和直线上一个点P0确定一条直线 已知P0不在平面上,计算直线和平面的交点P2 很容易理解,向量P0P1和向量P0P2在平面法线上的投影长 ...

  9. python计算直线与圆的交点,不用第三方库,方便迁移其他语言

    python求圆和线段/直线的交点 计算直线与圆的交点,不用第三方库,方便迁移其他语言 主要应用:图像及几何计算应用 计算直线与圆的交点,不用第三方库,方便迁移其他语言 主要应用:图像及几何计算应用 ...

最新文章

  1. EMNLP 2021 | 多标签文本分类中长尾分布的平衡策略
  2. 洛谷P2234 [HNOI2002]营业额统计(01Tire树)
  3. 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法
  4. Python 3 教程二:文件,目录和路径
  5. Bash:如何查看某个文件是那个程序/进程创建的?
  6. [转载] 七龙珠第一部——第094话 太阳拳
  7. tf.split()
  8. 每天接触大量论文,看看他们是怎样写笔记的 | PaperDaily #09
  9. Java 第二章 程序设计基础
  10. 电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...
  11. Hibernate HQL 语法大全(上)
  12. letsencrypt 免费https安装过程linux centos
  13. matlab光学谐振腔稳区图,基于图像处理的光学谐振腔自准直研究方法
  14. MySQL binlog日志三种模式选择及配置
  15. Bootstrapbutton
  16. stm8s103头文件
  17. 第二课:基于树莓派的10个经典项目(树莓派能做什么)
  18. 专访 | 阿里前辈李智慧:聊聊我这20年的架构经!
  19. Photoshop_如何使用
  20. Hackintosh连接收藏

热门文章

  1. 打造自己的LoRaWAN网关,进阶3:设参运维
  2. curl: (35) SSL connect error报错处理,更新nss版本;Linux版本centos7下载树
  3. 手把手教程Atlas安装与使用
  4. imi v0.3 发布,自动管理请求上下文,新增参数过滤器
  5. Online Deep Clustering for Unsupervised Representation Learning-CVPR2020
  6. Linux安装JDK8详细图文教程
  7. CIDR 计算网络地址、子网掩码、广播地址
  8. 【劳动最光荣】TcaplusDB祝大家劳动节快乐
  9. 一文读懂 MySQL 底层架构实现
  10. 做软件,中国人不比别人差 专访微软中国研究院院长:张亚勤