计算直线交点与夹角方法

空间直线 空间直线 空间直线由两个相交平面决定,方程组可表示这条直。 一般方程 点向式方程 又称对称式方程。 方向向量:平行于直线的向量。设(m,n,p),m,n,p为直线的一组方向数。 方向余弦:方向向量的余弦。 参数方程 由点向式方程转化来。 夹角 直线夹角 利用直线的方向向量的夹角表示直线的夹角。范围是0~180. 直线与平面夹角 直线与其在平面上投影的夹角。本质仍是直线与直线的夹角,范围0~1... 阅读详情

基于matlab求解初等几何问题

lyqmath

0 引言

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

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

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

代码

% By lyqmath

% DLUT School of Mathematical Sciences

% BLOG:http://blog.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/lyqmath

 

Unity求一条直线与平面的交点 这个是面试官经常考的一个问题,我们先把它变成一个数学问题。已知一个平面上的一点P0和法向量n,一条直线上的点L0和方向L,求该直线与该平面的交点P如下图首先我们分析一下我们知道平面和直线的法向量,知道平面和直线上的一点,求直线与平面上的交点p。这里我们就要引入点积的概念。点积的几何意义(百度百科直接粘的)设二维空间内有两个向量  和  ,它们的夹角为  ,则内积定义为以下实数: [2] 该定义只对... 阅读详情

相关推荐

根据四个点坐标求两个直线的交叉点坐标(Java&JavaScript)

根据四个点坐标求两个直线的交叉点坐标(Java&JavaScript)

小眼哥的博客 1539

求两条直线夹角

原理 程序源码 /******************************************************************************************* *函数功能 : 输入两条直线(每条直线以斜率和截距确定),返回两直线夹角,0为弧度,1为角度 *输入参数 : line_1_k为一条直线斜率,line_2_k为另一条直线斜率,aaa为0则为...

耶律大石的博客 2万+

数学综合-心得笔记【222】

单纯形法

逻辑君的日常 1027

js求两点之间的角度,距离

var p1:Point = new Point(40,30); var p2:Point = new Point(80,60); var angle:Number = Math.atan2((p1.y-p2.y), (p2.x-p1.x)) //弧度 -0.6435011087932844, 即 2*Math.PI - 0.6435011087932844 var theta:Number ...

烧仙草奶茶的博客 6338

四点坐标计算夹角.rar

已知两条直线(四点坐标)计算直线夹角,

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 979

计算两条线的交点和夹角

【代码】计算两条线的交点和夹角。

千山 743

告别手动转换!用腾讯云轻量服务器+QMT插件,5分钟搞定聚宽策略实盘(附完整源码)

本文详细介绍如何利用腾讯云轻量服务器和QMT插件快速实现聚宽策略的自动化实盘部署。通过云端信号中转站解决协议转换、信号缓存等核心问题,5分钟完成服务器配置,并附完整源码实现零改造实盘方案,显著提升量化交易效率。

weixin_28707739的博客 661

空间直线和三维物体之间的交线相关问题

1.如何求空间直线在某一平面上的投影直线方程 https://zhidao.baidu.com/question/631349383625570644.html 2. 知道平面一点和平面法向量如何求平面方程 https://zhidao.baidu.com/question/1176936423777863579.html 3 求空间直线和平面的交点 https://zhidao.baidu.com/question/1547238640427961907.html ...

weixin_43528481的博客 2404

SikuliX实战:5分钟搞定游戏挂机脚本(附防检测思路与Python集成技巧)

本文详细介绍了如何使用SikuliX快速开发游戏挂机脚本,包括环境配置、基础原理、防检测策略及Python集成技巧。通过实战案例展示如何实现自动化任务、高级防检测方案,并结合Python提升脚本性能与智能度,帮助玩家高效完成重复性游戏操作。

weixin_33228769的博客 335

8位可控加减法电路设计

一、设计要求   利用Logisim平台中现有运算部件构建一个8位可控加减法器,可支持八位加减法,利用已经封装全加器和逻辑门进行连接,要求实现相应的输出,判断是否溢出。 二、方案设计 实验原理: [A]补+[B]补 = [A+B]补(mod2^n+1)   公式1        [A-B]补 = [A]补+[-B]补(mod2^n+1)    公式2 FA为全加器,利用全加器实现加减法,难点在于实验减法,对输入的[Y]补各位取反加一即为[-Y]补,利用公式2,就可以将减法转化为加法再利用全加

qq_51700383的博客 1万+

【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角

线段相交,直线方程,一般式,交点坐标,快速排斥实验,跨立实验

shuaixio的博客 4352

BUCK降压斩波电路设计实战:从IGBT选型到续流二极管优化

本文详细解析了BUCK降压斩波电路的设计实战,从IGBT选型到续流二极管优化,涵盖了关键参数设计、调试技巧及电磁兼容问题解决方案。通过实际案例和数据对比,帮助工程师高效完成DC-DC转换电路设计,提升系统性能和可靠性。

weixin_29253711的博客 95

两相交的直线段夹角平分的直线上过交点距离为d的另一点求解公式

两相交的直线段夹角平分的直线上过交点距离为d的另一点求解公式 问题描述: 已知p0,p1,pN三个点,p0到p1走向直线段,pN到p0走向直线段,相交于p0点, 则pN到p0到p1夹角为a,平分夹角为a/2,求经过p0点方向角为平分线上距离p0点距离为d的点p(x,y)坐标值。 平分线点斜式方程为: y-y0=k(x-x0) 两点距离公式为: (x-x0)2+(y-y0)2=d^2 斜率k=tg(a) 联合解方程组: y-y0=k(x-x0) (x-x0)2+(y-y0)2=d^2 Mathematica

hsg77的专栏 716

PD3.0详解 电源规则,全解!!!全解!!!

电源规则 大师匈今天谈一下PD3.0的电源规则,PD3.0标准标定的规则。 USB协议声称,为了世界和平世界环境,让大家用上统一标准的充电器,不用再为每一个用电设备都配一个专门的充电器,这些充电器各种各样的都有,所以有时候大师匈也很烦!!!那么为了维护世界和平,USB协议呢就制订了这个PD快充协议,还有它的规则,只要全世界都用PD,就解决了这个大问题。 在这里先了解一个关键字,PDP: Power Delivery Power PD电源的功率。 每个PD充电产品的功率要以0.5W的精度上报,比如大师匈做的P

大师匈的博客 1万+

CosyVoice语音合成使用教程

CosyVoice是一款开源的语音合成工具,它基于深度学习模型,能够生成高度逼真的语音内容。该工具支持多种语言的语音生成,包括中文、英文、日文、粤语和韩语。CosyVoice的亮点在于它对生成语音情感和韵律的精细控制,通过富文本或自然语言输入,可以显著提升合成语音的情感表达能力。CosyVoice提供了多种预训练模型,用户可以根据需求选择合适的模型。:基底模型,适用于一般语音合成任务。:经过SFT微调的模型,适用于特定音色和情感的语音合成。:支持Instruct微调的模型,适用于自然语言控制的语音合成。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 4444

a programmer’s geometry

1、点、线(二维)1.1、两点间的距离给定两点K(x1,y1),L(x2, y2),根据勾股定理可得两点间的距离r:deltaX = x2-x1deltaY = y2-y1rsq = deltaX*deltaX+deltaY*deltaYr = sqrt(rsq) // (1)但是,这通常不是一个轻便的计算,既要开平方,又要求平方根。如果只是比较两点间的距离

1045

Android15 修改触摸点上限为40

把MAX_POINTER_ID从默认的31修改为39,这里为什么要从31修改为39,是因为上面说明用BitSet32极限就只能支持32个点,因为从最小的ID是0,所以要支持40个点ID也要对应改为39.最近有个需求,需要修改Android系统的触摸点数,Android系统默认的点数是16个点,因为现在是大屏项目,有客户需要修改为40个点,好吧,客户最大。6.最后进行编译,开机开启触摸点检测,可以使用开发者模式中的显示触摸点功能,再叫上3个人,用双掌触摸屏幕,发现左上角有显示40个触摸点,修改成功。

tzj1058756809的博客 573

三维几何-平面

平面的表示。 通常用点法式(p0,n)来描述一个平面。其中点p0是平面的一个点,向量n是平面的法向量。每个平面把空间分成了两个部分,我们可以用点法式表示其中一个半空间。具体是哪一个呢?是这个法向量所背离的那一个(即法向量指向远离半空间的方向)。 既然是法向量,n就垂直于平面上的所有直线。换句话说,平面上的任意点p满足Dot(n,p-p0)=0. 设点p的坐标为(x,y,z),p0的坐标为(x...

辣条不爱辣的博客 1734

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

圆的相关计算(刘汝佳版)

#include #include #include #include #include using namespace std; /*Point的模板*/ struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y){} }; typedef Point Vector; //向量+向量=向量,点+向量=点 Vec

BRCOCOLI的博客 428

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

三维空间中关于点线面的计算

1. 求两点间的距离

u011442652的专栏 4216

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

空间解析几何与向量代数

一、向量基础知识 1、向量a的单位向量为,注意有正负号 2、方向角:向量与各坐标轴的夹角 方向余弦:方向角的余弦值,即各轴对应坐标除以模长,各轴坐标即为向量的各轴投影 二、内外积与混合积 1、向量积满足反交换律,计算使用三阶行列式(行列式三行的顺序不影响计算结果,顶多加个正负) 三、平面及其方程 1、平面方程有一般式,点法式,截距式,一般式中x,y,z的系数即为平面的一个法向量 截距式,其中a,b,c对应x,y,z截距 2、平面平行与哪个坐标轴,或包含,那么他的法向量对应...

hscker的博客 3998

学习OpenCV3:判断两条直线相交,并计算交点和夹角

一、问题   已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1​(x1​,y1​,x2​,y2​)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2​(x3​,y3​,x4​,y4​),现希望判断l1l_1l1​与l2l_2l2​间是否相交。若相交,计算出两条直线的交点和夹角。 二、分析 1、直线方程 y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1k=−.

北冥有鱼wyh的博客 8763

利用 python 计算点到直线距离、直线间交点夹角

近期在用 OpenCV 时需要涉及到一些点与直线关系。这都是很早以前的中学知识了,无奈只好重新捡起来。本次项目主要需要用到以下三种计算1. 点到直线距离2. 两条直线交点3. 两条直线夹角1. 点到直线距离由于项目中得到点的坐标最容易,因此采用向量法进行所有的数学计算最清晰明了。点到直线距离就采用向量法推导。 推导过程: 代码实现:array_longi = np.array([x2-x1, y...

panfengzjz的博客 1万+

两条直线的夹角

编写一个c++程序,计算四个点所构成的两条直线的夹角 setprecision(n)描述:可以控制输出流显示浮点数的数字个数。C++默认的输出流数值有效位是6。 平面上给定4个点的坐标A B C D,分别表示直线AB和CD。坐标均为绝对值不超过100的整数。计算出这两条直线所成的锐角是多少度。(保留两位小数) 注意:当两直线平行或者重合,答案为0。 测试举例: 测试输入:0 0 1 0 0 0 0...

韶言大雅 5951
上一篇: 利用区域属性计算图像凸包
下一篇: 简单的图像识别标记
lyqmath
博客等级 码龄19年 446粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值