社区
数据结构与算法
帖子详情
两条直线的交点有几种解法
ningyong58
2008-09-18 02:26:27
直线方程
y=kx+b
第一条直线方程
b1=y1-k1*x1
第二条直线方程
b2=y2-k2*x1
交点X,Y一定在第一条和第二条直线上
y=k1*x+b1
y=k2*x+b2
联解
x= (b2-b1)/(k1-k2)
y= k2x+b2
请问各位大侠
1 还有其它的解法吗?
2 上述解法的约束条件?
个人理解,只相交就没有约束条件.
约束条件是k1=k2平行没有交点.
只要有两条件直线和两条直线的各自一个端点,且k1<>k2.两条直线一定相交.
...全文
1033
8
打赏
收藏
两条直线的交点有几种解法
直线方程 y=kx+b 第一条直线方程 b1=y1-k1*x1 第二条直线方程 b2=y2-k2*x1 交点X,Y一定在第一条和第二条直线上 y=k1*x+b1 y=k2*x+b2 联解 x= (b2-b1)/(k1-k2) y= k2x+b2 请问各位大侠 1 还有其它的解法吗? 2 上述解法的约束条件? 个人理解,只相交就没有约束条件. 约束条件是k1=k2平行没有交点. 只要有两条件直线和两条直线的各自一个端点,且k1k2.两条直线一定相交.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zwq040438
2008-09-18
打赏
举报
回复
平面与空间呢?
大王派我去巡山
2008-09-18
打赏
举报
回复
你的解法是对的。
k1<>k2说明两条直线不平行,从而一定会相交,这也没问题。
问题是象y=kx+b这样的方程并不能代表所有的直线,对于竖直的直线(例如x=0)无法化成这样的形式。
建议考虑这种特殊情况,或者干脆用Ax+By+C=0的形式来表示直线方程。
年过五旬还在努力,佩服至极,向你学习!
猫已经找不回了
2008-09-18
打赏
举报
回复
如果是按照几何先求出x,y的表达式,我觉得结果都是这样啊,有几种方法有什么意义那么?只要k1!=k2就可以求了。
fire_woods
2008-09-18
打赏
举报
回复
有一个解法就够了,反正结果都是一样的.
ningyong58
2008-09-18
打赏
举报
回复
[Quote=引用 2 楼 bhujm 的回复:]
初中数学吧。你说的没什么不对呀。
[/Quote]
五旬之人,初中几何就没学,总结工作经验,涉及到初中几何,见笑了.
请问大侠,还有其它解法吗?
bhujm
2008-09-18
打赏
举报
回复
只要有两条直线的各自两个不同的端点,且k1 <>k2.两条直线一定相交?
bhujm
2008-09-18
打赏
举报
回复
初中数学吧。你说的没什么不对呀。
ningyong58
2008-09-18
打赏
举报
回复
只要有两条件直线和两条直线的各自一个端点,且k1 <>k2.两条直线一定相交.
应该改为
只要有两条件直线斜率和两条直线的各自一个端点,且k1 <>k2.两条直线一定相交.
matlab离散点连成的两曲线的
交点
-intersections.m
matlab离散点连成的两曲线的
交点
-intersections.m 本帖最后由 kastin 于 2012-12-29 11:47 编辑 引言 曾经思考过曲面求交,结果发现是学术界的一个难题,并且也想出了一个当前广泛使用方法原理一样的近似
解法
(追踪法)。当然网上也有很多方法,只不过那些方法非常粗糙,无非就是meshgrid出离散网格,比较两曲面在某位置的坐标是否在某一精度范围内,然后标记显示之。这个方法仅仅当离散网格非常细的时候才比较精确。除此之外,还有个非常严重的问题:上面的“精度范围”不是你随心所欲给的,而且也没规律寻找,当给得不恰当的时候,在格点处两曲面点作比较,会出很多个符合要求的点,或者一个也没有。这样就会使得交线非常曲折,甚至断裂等,严重影响精确度。 ———————————————————分割线———————————————————————— 当然,既然有曲面求交,那么也有曲线求交,其基本结构就是两曲线求交。只是曲线求交问题,事先得澄清一些注意点: 1. 数学分析层面求两曲线
交点
,其实就是方程组求解; 2. “曲线”概念包括“
直线
”(处处曲率半径为无穷大); 3. Matlab的重点是离散点 矩阵运算,因此所有运算都是基于离散的,因而这里的曲线并不是绝对光滑的。 4. 近似试探与未知函数表达式。 对于1,我想说的是,如果你想要求得两曲线的精确
交点
,并且一个不漏,那就直接求解方程组,不用看本帖下文; 对于2,
直线
在Matlab里面是两个点确定,因此
交点
如果是一段线(无穷个点)的情况,可能只是显示两端点为
交点
; 对于3,很简单的例子,参数方程 x=cos,y=sin 在数学分析(即连续空间)层面上是个圆,但是如果你在离散t的时候,间距比较大,那么最后Matlab绘制的图像不是圆,而是正多边形了。因此,此时我们讨论曲线
交点
是这个离散点连线的图形与其他图形的
交点
,而非圆与其他
交点
。这也是我在标题中加了“离散点连成”的修饰词,防止被误会。 对于4,既然是求曲线
交点
,那么本方法可以作为求方程组的近似解。当然,如果离散点够多,解的精确度可以保证,不过不能保证一个不漏。另外就是,对于一组离散点构成的曲线,很难知道它们的解析表达式,因此想通过非线性方程组求解的方法来求
交点
,就不大可能了(不过你可以用曲线拟合出函数解析式),因此,本帖的方法将会是一个较为有效求
交点
的方法。 废话了那么多,下面就说说曲线求
交点
的方法吧。除了求解方程组,很多人想到的方法就是“离散点 判断距离是否足够接近”,这个方法原理跟引言中曲面求交的方法是一样的。因此缺点也是一样的——太粗糙了。网上这种方法的代码也很多,这里就不上了。 下面将阐述我的方法以及给出例子代码。 我有两种思路,一种是高级绘图层面的(不涉及到底层操作),一种是底层的。我只给出了第一种的代码,因为我不会底层操作。 思路一:既然matlab曲线绘图是通过有序离散点依次连线形成,也就是说,通过“以直代曲”的过程,那么曲线
交点
无非就是离散点(结点)或者两线段
交点
。这比上面直接用
交点
附近的结点替代
交点
的方法要精确得多了。而两
直线
交点
很容易求,只要知道四个点坐标,那么
交点
精确坐标自然可以表示出来。这就是求
交点
的原理。只是还有一些细节处理和要注意的地方,我会留到后面再详细说。 思路二:仔细观察两曲线
交点
的特性,很容易发现,其实
交点
就是操作系统底层绘图重叠的那些像素点。因此,只要给要绘制的像素点做个标记,将那些重合的点突出显示(比如换个颜色),那么就相当于显示出
交点
了。这种方法由于是本质性的,因此不会遗漏任何
交点
,而且精确度极高,适用范围广。Matlab提供的plot plot3 surf等绘图函数都属于高级绘图,底层绘图(或称低级绘图)只有line surface以及patch等少数函数。但是,这里的“底层”并非真正的底层,因为它还是经过封装了的,而C 的MFC里面直接用刷子绘图,那才是依靠操作系统完成的真正的“底层”绘图操作(包括所有窗口都是操作系统绘制的)。这里扯远了,想要说明的就是底层绘图的概念而已。只是我不会用matlab实现这些底层绘图。 上面说了思路,下面就详细说说一些注意点和需要处理的细节。 为了算法的健壮性,就必须考虑各种奇异的情况,防止bug。我们要考虑曲线有分支(很多代数曲线是这样的,代数几何里面研究的东西)、间断跳跃(有绝对值函数或者存在渐近线情况)、首尾是
交点
、在切点相交,等等这些情况。而且对于定位
交点
处附近的四个最近端点也是个问题(因为这里存在一个情况,如果曲线1上的一条线段与曲线2上的
两条
或者以上的线段相交,我的程序因为这个问题没能有效解决,出现在一些非常特殊的情况下会遗漏部分
交点
)。上面的情况如果不考虑,那么你的程序就会出现各种各样的问题。 对于通常情况,我考虑使用变号法则来判断
交点
(也就是高数里面“连续函数变号端点内存在零点”),对于上面说的特殊情况,那么预先处理,比如先看是否存在eps内的,或者为零的结点,有则直接记录,没有的话,通过两线段求交来确定
交点
。至于遍历顺序的问题,为了简便,我指考虑两曲线离散点个数相同的情况(因为不同的话,会出现一些无法处理的情况),而且优先考虑离散点的坐标值中x或者y都相同的情况(比如x=0:0.1:pi; y1=sin, y2=x.^2这
两条
曲线的x值相同分布)。 下面是曲线y=cos.*exp)与y2=sin.^2 cos在[0:pi/18:2*pi]区间内的
交点
的代码: 注意:我没有写成接口的形式,虽然对于比那些较懒的人来说不太方便,但是这样做是为了让你能更好弄懂原理,并能自己改造代码。因此,下面的代码可以稍作修改,就能解决别的曲线求
交点
。这样,不愿思考的懒人就没法达到自己的目的了~% 绘制两离散曲线的
交点
% 注意: % 1. 这里的“
交点
”指的是离散点连线绘出的图形的
交点
,而非函数或者方程理论分析上的
交点
, % 因此,这个程序不能作为求根来用。 % 2. 要求两曲线的离散点的个数一样。 % 3. 两个曲线出现参数方程的话,大多数情况正常。但是经测试发现,对于某些非常特殊的情况会出现bug, % 除非调用ezplot的数据(xdata,ydata)。 % % by kastin @Mar 21, 2012 clear; debug=false; %关闭显示求
交点
过程 % 曲线1 x=0:pi/18:2*pi; y=cos.*exp); % 曲线2 [x1 N]=sort; %此处对于C1参数方程,C2为显式函数;或者均为参数方程时候有用 % 下面几句代码在本个案下没有什么特殊作用,但是当出现参数方程的时候,下面的方法改动一下就会有用。 y1=sin.^2 cos; %用于作图 x2=x; y2=sin.^2 cos; %用于寻点 h=plot; y<=eps)=0; y20; neg=cy<=0; %确定变号位置 fro=diff~=0; %变号的前导位置 rel=diff~=0; %变号的尾巴位置 zpf=find; %记录索引 zpr=find 1; %记录索引 zpfr=[zpf; zpr]; hold on % 观看求
交点
过程 if debug, hp=plot,y,'r.-',x2,y2,'g.-'); end %线性求交 x0=.*-y)-x.*-y))./ y2-y-y2); y0=y ).*-y)./-x); if any), y0=y2; end %加入已经判断为零的位置 x0=[x<=eps) x0].'; y0=[y<=eps) y0].'; hc=plot; %绘制
交点
if debug, legend;hp],'C1','C2','
交点
','微线段1','微线段2',0); end legend xlabel, ylabel, zlabel; title axis equal hold off disp disp) %排除重复的点复制代码经测试十
几种
奇怪的曲线相交(包括参数方程形式的曲线),目前发现上述代码的方法有四种情况会出现遗漏一两个
交点
。(其实上面代码本意是求显式函数的曲线
交点
,或者未知表达式的离散点曲线的
交点
,并未针对参数方程,隐函数方程做优化,但是可以凑合着用用。)
求
直线
与平面的
交点
如何求点到平面的
交点
今天遇到一个小问题,如何求点到平面的
交点
,并如何将其高效实现,下面就从数学的原理以及编程实现来探究一下这个小问题。目录如何求点到平面的
交点
目录 问题重述与几何模型 数学分析 编程实现
matlab局部放大找
交点
,11.matlab找
两条
离散曲线的
交点
引言曾经思考过曲面求交,结果发现是学术界的一个难题,并且也想出了一个当前广泛使用方法原理一样的近似
解法
(追踪法)。当然网上也有很多方法,只不过那些方法非常粗糙,无非就是meshgrid出离散网格,比较两曲面在某位置的坐标是否在某一精度范围内,然后标记显示之。这个方法仅仅当离散网格非常细的时候才比较精确。除此之外,还有个非常严重的问题:上面的“精度范围”不是你随心所欲给的,而且也没规律寻找,当给得不...
matlab拟合曲线poly
交点
,matlab 离散曲线求
交点
引言曾经思考过曲面求交,结果发现是学术界的一个难题,并且也想出了一个当前广泛使用方法原理一样的近似
解法
(追踪法)。当然网上也有很多方法,只不过那些方法非常粗糙,无非就是meshgrid出离散网格,比较两曲面在某位置的坐标是否在某一精度范围内,然后标记显示之。这个方法仅仅当离散网格非常细的时候才比较精确。除此之外,还有个非常严重的问题:上面的“精度范围”不是你随心所欲给的,而且也没规律寻找,当给得不...
非线性方程的
几种
线性
解法
(二分法,不动点法和牛顿法)
非线性方程的
几种
线性
解法
对于线性方程我们有很多方法来解,比如简单的线性方程都会有公式直接来计算。但是涉及到复杂的线性方程比如高阶多项式方程,非线性性方程也是很那直接求解的,在数值分析的角度就很容易来求解这类方程了。下面介绍的就是
几种
简单的非线性方程的数值
解法
。 二分法 由根的存在性定理:如果f(a)f(b)&lt;0,我们判定至少存在一个根在区间[a,b]上。 那么下面我们怎么将这个范围内的根找...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章