图片缩略图

曲线的交点

2.47版本1.5.0.0 (KB) NS
十字路口的快速计算和self-intersections曲线使用向量化。

267下载

更新2010年9月24日

视图版本历史

查看许可协议

而其他一些功能已经存在于FEX计算曲线的相交点,这个简短的代码写的速度是最高优先级。没有循环使用,充分利用MATLAB的向量化的能力

我欢迎任何评论,建议,bug报告等。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

INTERX相交的曲线
P = INTERX (L1, L2)返回两条曲线的交点L1
和L2。曲线L1, L2可以封闭或开放和描述
由two-row-matrices,每行包含它的x - y坐标。
组曲线的交点(如等高线,相乘
连接区域等)也可以通过将计算他们
nan的列

L = [x11 x12 * 13…南x21将x23…;
日元y11 y13……南y21 y22每个…]

L1和L2 P有相同的结构,及其对应的行
x - y坐标的L1和L2的交集点。如果没有
十字路口发现,返回的P是空的。

P = INTERX (L1)返回自交的L1点。保持
代码简单,曲线相切的点本身
不包括在内。P = INTERX (L1, L1)返回所有的点的曲线
连同任何自交点。

例子:
t = linspace(0, 2 *π);
r1 =罪(4 * t) + 2;x1 = r1。* cos (t);日元= r1。* sin (t);
r2 =罪(8 * t) + 2;x2 = r2。* cos (t);y2 = r2。* sin (t);
P = InterX ((x1, y1)、(x2, y2));
情节(x1, y1, x2, y2, P (1:)、P(2:),“罗”)

引用作为

NS (2021)。曲线的交点(//www.tianjin-qmedu.com/matlabcentral/fileexchange/22441-curve-intersections), MATLAB中央文件交换。检索

评论和评级(125年)

伊莱亚斯

除了由帕特里克•Forssen评论:

第68行更改为:

如果isempty (i), P = 0 (2,0); i = []; j =[];回归;结束;

所以修改的功能仍然工作,即使两条曲线不相交

伊莱亚斯

妮可fevola

阮不再见到

谢谢NS。
你能帮我详细了解C1和C2或逻辑理论。

阿里Moshrefzadeh

Moayed Jumah

为什么我不能使用这个函数找到任何两条直线的交点?

帕特里克•Forssen

伟大的提交!失踪的一件事是指数的交叉部分。但是,这很容易固定用一些小代码修改。改变函数头,
[P, i, j] = InterXMod (L1,变长度输入宗量)
和改变76行,
[P,印第安纳州]=独特([dx2 (j)。* S1 (i) - dx1 (i)。* S2 (j),…
dy2 (j)。* S1 (i) -₁(i)。* S2 (j)]。/ (L L)、“行”、“稳定”);
P = P ';我=(印第安纳州);j =(印第安纳州);
然后你应该第一提供多线交叉段指数(s)的输出变量的“我”和第二提供折线(s)在输出变量“j”。

耶稣Portilla

马库斯武家

阿道夫•Veliz

博季诺夫迪斯科

Siddhanth谢蒂

Gayan De Silva

完美的工作。非常感谢。

查克·海登

官厅苏

吕杨

嗨,NS,
我试着翻译它fortran。你能帮我详细了解C1和C2或背后的逻辑理论吗?

萨尔曼·汗

伟大的功能。我用它来阅读自动化的轴曲线相交于一条水平线。它运行良好后指令后INTERX (L1, L2)。

Chamanth

高度的功能。

卢卡斯

谢谢你这个非常有用的函数。
我只需要确定一组以上的交集点(即减少线功能。,负斜率)。我怎么能改变这段代码达到这些点吗?
问候,

约翰·迈克尔·希

Ned气

约瑟夫Lilek

西蒙周

幕斯塔法El Hamdaoui

一个非常有用的功能。谢谢!

托拜厄斯Kistler

莱奥波尔多巴西

莫拉大肠Monville

你好,
我试着你的代码发现如果一个广场上闭合曲线的交点(多边形)。我得到以下错误:
错误使用bsxfun
单体维度的两个输入数组必须相互匹配。
错误InterX(第63行)
C1 =函数宏指令(高频D (bsxfun (@times, dx1, y2) -bsxfun (@times₁, x2), S1), 0);
错误Pixelize_Collimator_Aperture_v2(第107行)
P = InterX ([X, Y], [sqx; sqy]);

多边形是一个封闭的曲线由42分。
广场是一个封闭的曲线广场5点组成
必须两条曲线有相同数量的点吗?这不是你的描述中指定。
如果你喜欢我可以发送我的曲线和广场。
谢谢你!
莫拉

Mindaugas

什么InterX函数返回空列表,如果自交在输入点。
例如,InterX返回空列表,但自交的观点是[1]在这段代码中:
x = [0 1 2 1 1];
y = [1 1 1 2 0];
图;持有(上);
i = 1:长度(x) 1;情节(x([我+ 1]),y([我+ 1]),“线宽”,i);结束;
P = InterX ((x, y))

威廉·里德

在R2019a没有这样的命令

朱尔斯雷

它工作,但是并不像承诺的那么快。测试后比较反对“十字路口”功能给相当类似的结果:

InterX =运行时间是10.502146秒。
十字路口=运行时间是10.567976秒。

相比都使用相同的两条曲线形成每1200点。

杜米尼克Mattioli

萨利姆汗

你好,我是新Matlab,我得到这个错误在运行这段代码,请帮助我的人。

解析错误176年线附近的文件数据集\ \八度\ code_samp C:\Users\Omar-PC\Desktop\Algo问题
les \ octave.m

在这个背景下嵌套功能没有实现

> > >函数u = D (x, y)

任何帮助将是感谢,谢谢!

凯瑟琳樵夫

嗨,我想计算一条垂直线和一条曲线所描述的两个向量的数据。这个函数似乎工作,但它给我两套坐标,只有一个可能的十字路口给我输入的信息。也许这是有关事实数据点的曲线是一个数组而不是一个数学曲线?因为从列表曲线进入据点,我试图确定的x值是两点之间的y值。任何帮助破译这个输出将是巨大的。

阿曼达Bernardy

我的matlab告诉我“InterX”是一个未定义的函数

Pim范·密尔

吕杨

嗨,NS,

代码很好的工作。我发现十字路口的价值,但现在我想找到索引。当我使用find函数,它没有找到合适的索引的交集点,但空值。你能帮我找到的方法找到合适的索引的十字路口?

提前谢谢!

杨。

Aurea94

这里离马纳利市DODIYA

你好,我越来越错误如下。

错误使用symengine(59行)
数组的大小必须匹配。

信谊误差/ privBinaryOp(第903行)
Csym = mupadmex (op, args {1}。年代,args{2}授予,
变长度输入宗量{:});

错误。*(第238行)
X = privBinaryOp (A, B,“symobj:邮政”,“_mult”);

错误InterX(60)行
S1 = dx1。* y1 (1: end-1) -₁。* x1 (1: end-1);

错误solve_equation(28行)
P = InterX (L1, L2);

塞缪尔·凯尔西

大卫Stolnis

不工作。确实有两线交叉但没有兴信息....空数组!看起来像人的运气。

杜米尼克

本Mohankumar

伟大的脚本——完美的工作。我有一个问题,我有几个十字路口来计算,我在想会是多么容易vectorise计算来提高代码的性能?干杯,本

迈克尔Redling

艾玛。SGHAIER

莱奥波尔多巴西

严特陈

Tinashe马丁Gonese

它是空的交点做interestect时对这些行。
L1 = [1152.3 - 1069.6;
559.6 - 656.1)
L2 = [1570.3 - 1564.1;
884.1 - 937.2)

Ozan侯赛因

嗨,代码很好的工作。谢谢!

我有一个问题,是否可以使用这个函数来找到的交集多个曲线矢量化的方式?说我们有一组曲线存储矩阵的列和我们另一组曲线存储的列矩阵B是可能找到的交集(:,i)和B(:,我)不使用for循环?

sundar

完美的工作!非常感谢代码。

Mahta Mazloumi

它工作得很好!谢谢你!

Nedim Gokhan艾登

很快,简单而有用。

尼科

Ashutosh

好奇' D '在给定的函数是什么?给错误未定义变量D

普什卡Mahajan

太好了。易于使用。非常感谢! ! !

Randika Vithanage

不能处理如果行利益超越给定的点

HiWave

工作很好,但是会很高兴知道十字路口是谁输入包含多个cureves时

阿里Hassanzadeh

瑞安Meekins

这段代码的作品不错,不过,这段代码只说线相交,即使他们重叠。例如:
xA = (0 0 1);丫= [0 1 1];线= (xA; yA);
xB =[0 0 .25升至0 0为二十五分。5。5 1];yB = [0。5。5。1。1。。1 1];LineB = [xB;];
情节(xA,是的,xB, yB);
LineB P = InterX(白)

P =

0 0 0 0.2500 - 0.5000
0.5000 0.7500 1.0000 1.0000 1.0000

我在找一个代码,只说,行如果他们确实十字相交。什么好主意吗?

迈克尔·曼

约书亚·柯林斯

格伦·戈麦斯

亚历山大·赫尔曼

r p

大卫Onywoki

@JonathanCamilleri是什么问题。我得到同样的错误

程曾

KSSV

劳拉·伯科威茨

宾森泰

塞缪尔·佩提特金

Emrecan日元

很棒的功能,谢谢!

Yuanjun赵

伟大的代码,帮助我很多!谢谢! ! !

赛义德·侯赛因

埃里克·曼德

伟大的代码!谢谢!

Abrar哈比卜

乔纳森·卡米尔

忽略我之前的评论。意识到什么是错误的。

乔纳森·卡米尔

你好,我想要使用这个函数但我得到以下错误:

错误InterX(60)行
S1 = dx1。* y1 (1: end-1) -₁。* x1 (1: end-1);

错误data_vis(第66行)
国米= InterX (f1、f2);

然而,我的曲线,f1和f2都是相同的大小,25525 x 1双#

有什么建议吗?

cebum

PH值

希瑟

一些问题的例子:
t = 0:π/ 200:2 *π;
r1 = 2;x1 = r1。* cost + 2;日元= r1。*罪(1 * t);
x2 = t;y2 =条t - 3;
P = InterX ((x1, y1)、(x2, y2));
情节(x1, y1, x2, y2, P (1:)、P(2:),“罗”)
轴平等

海蒂Loh

阿西夫Arain

太好了!
有可能获得交集点以及一个逻辑向量表示相应的曲线/参与交叉的点行吗?以后,我想分配权重基于直线或曲线相交点。
感谢任何帮助。谢谢!

得很好的

BluePoseidon1643

更详细的评论。

Tamas Balogh

哈瑞先生Kankanala

Hojoon Choo

这正是我在寻找的。谢谢!

大肠Cheynet

Brian Kim

顺便说一下,我想知道这段代码是在非线性的倡导。

farnaz hajipour

我可以下载这个文件吗?

马蒂亚斯

评论我的评论(见下文):当你有兴趣不仅在指数中的点,还那么我现在认为,这是最好不要使用‘独特’或‘uniquetol’。(这是特别重要的,当你正在调查自交。然后一个交点导致多个条目P不同指数i和j)。
否则你可能会宽松的正确分配点指数i和j。

BboySlug

工作良好,绘制数据系列的两个矩阵是相同的大小。我认为这是问题的“不工作”的家伙跑进。我手头的工作,我的两个数据系列不一样大小,所以它给horzcat错误。这将是一个很好的方式来更新代码如果它还可以使用两个矩阵/数据系列中没有相同的尺寸。:)

马蒂亚斯

非常好,非常快。
我想我发现了一个小错误相关的只有你感兴趣的是指数I和j,预计交集的地方。
我建议来取代76年和77年的行:
[P,印第安纳州]= uniquetol ([dx2 (j)。* S1 (i) - dx1 (i)。* S2 (j), dy2 (j)。* S1 (i) -₁(i)。* S2 (j)]。/ (L L)、eps、“ByRows”,真正的);
P = P ';
我=(印第安纳州)+ 1;
j =(印第安纳州)+ 1;

以这种方式排序(来自独特的或更好的uniquetol)分配指标。另外我增加了indec 1,但这是或多或少的味道。

作为

Pouriya Zarbafian

Tillmann Stubler

康Ramalho德布里托

谢谢你这宏伟的代码。

阿施施

Yongshou梁

Yongshou梁

嗨,NS。谢谢你这个优秀的代码。它运行非常快。然而,我也有问题的埃米尔。当输入点向量超过20000列,它是内存不足。我的matlab是2014的版本(64位windows上)。你可以寄给我修改的代码或者给我一些建议吗?我的电子邮件:Liangys363@gmail.com。非常感谢。

埃里克·V

谢谢。太好了。工作很好。

亚伯布朗

小君你勒

它不工作。

乍得格林

这个函数已经被证明对我很有帮助。谢谢你的分享,谢谢你写这样的漂亮,整洁的代码。

非常感谢。伟大的算法和作品完美和超级快。

说不出话来

Ilya

它将有助于显示如何让“t”的(全部)值,十字路口的发生。

即“t”的两个值参数对应于每个自交。

Ilya

它将有助于显示如何让“t”的(全部)值,十字路口的发生。

马修Arthington

我寻找一个快速路口函数,我找不到一个比这更快。

我有点惊讶,重复的子函数调用是一样快的大曲线。Vectorising加速功能的一些操作,但只有较小的曲线。

NS

埃米尔:谢谢你的评论。不幸的是没有多少可以做,除非使用for循环,这可能会大大延迟执行时间。

执行时间尽快,我需要创建N x M矩阵,其中N和M是在每个曲线段的数量。

也许你可以试试其他的贡献在文件交换,不利用向量化,但它可能会非常缓慢(十字路口应该有大约4 e10测试向量的大小!)

另外,联系我给你发送一个修改我的代码来测试您的数据。然而,我不能保证结果的准确性,因为我没有做广泛的测试,但似乎工作。

埃米尔奥尔森

我经常使用这个函数来分析跨越门槛的运动数据,我爱它!然而自2012年使用b在64位windows机器上我一直耗尽内存,即使只是测试20000列向量。任何想法修复吗?

派Mes

非常好,快和通用的代码。大的UPS。

默罕默德

嗨NS
请忽略上面的评论。我已经找到了一种方法,使用您的代码。

致以最亲切的问候。

默罕默德

嗨NS

谢谢你的分享。
在我的例子中,我有两条线的点数据形式。例如,我有3列数据的Y, X1和X2。第一行L1通过绘图和连接(X1, Y)和第二行L2通过绘图和连接(X2, Y)。
你能解释我怎么这个点数据转换为“two-row-matrices”这里所描述的那样。

最好的

NS

飞行员:是的,它应该处理这些案件。

飞行员

这个代码适应路口点如果线段图的垂直?

亚当

非常感谢这个函数! ! !工作正确,其他交叉功能没有! !

Jeroen van Nugteren他

缬草

阿伊莎sohail

非常有用的.....非常感谢

张Yanxiang股份

亚当

什么它说。没有问题。

Oguzcan

有用的,有效的,而且要快

MATLAB版本兼容性
创建R2008a
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!