虽然FEX中已经存在的一些其他功能,但是计算曲线的交叉点,而这段短片代码是用速度写成的最高优先级。始终没有使用循环,充分利用MATLAB的矢量化功能
我欢迎任何意见,建议,错误报告等。
-----------------------------------------------------------------------------------------------
曲线的交点
P = INTERX(L1,L2)返回两条曲线L1的交点
和L2。曲线L1,L2可以是闭合的,也可以是开放的
通过两行矩阵,其中每一行包含它的x和y坐标。
曲线组的交叉点(例如轮廓线,乘法
连接区域等)也可以通过将它们与a分开来计算
例如,列的nan
l = [x11 x12 x13 ... nan x21 x22 x23 ......;
Y11 y12 y13…NaN y21 y22 y23…]
p具有与L1和L2相同的结构,其行对应于
L1和L2的交叉点的X和Y-坐标。如果不
发现交叉路口,返回的p是空的。
P = INTERX(L1)返回L1的自交点。保持
代码很简单,曲线与自身相切的点
不包含。P = Interx(L1,L1)返回曲线的所有点
与任何自交叉点一起。
例子:
t = linspace(0,2 * pi);
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,:),'Ro')
ns(2020)。曲线交叉口(//www.tianjin-qmedu.com/matlabcentral/fileexchange/22441-curve-Intersections),Matlab中央文件兑换。检索到。
1.5.0.0. | 修复了刘Minjie标识的错误,这些错误有时会出现两点线段。 |
|
1.3.0.0. | 更快的执行和更好的内存管理 |
Gayan De Silva(查看配置文件)
效果完美。非常感谢。
查克海登(查看配置文件)
gu(查看配置文件)
杨璐(查看配置文件)
嗨,NS,
我试图将它转换为Fortran。你能帮我详细了解C1和C2还是背后的逻辑理论?
Salman Khan.(查看配置文件)
伟大的功能。我用它来自动阅读我的曲线与水平线相交的X轴。在以下对Interx(L1,L2)进行以下说明后,它完美无瑕地工作。
Chamanth(查看配置文件)
高度灵感的功能。
卢卡斯(查看配置文件)
感谢这个非常有用的功能!
我需要仅确定高于一组减少线函数的交叉点(即,带负斜率)。如何更改此代码以达到这些要点?
问候,
约翰迈克尔赫基(查看配置文件)
Ned气(查看配置文件)
Joseph Lilek.(查看配置文件)
Simon Chou.(查看配置文件)
Mustapha el hamdaoui(查看配置文件)
一个非常有用的功能。谢谢!
Tobias Kistler.(查看配置文件)
Leopoldo Brasil.(查看配置文件)
Maura Monville.(查看配置文件)
你好,
我尝试了在查找方面的代码,如果广场与闭合曲线(多边形)相交。我收到以下错误:
使用bsxfun时出错
两个输入数组的非单维必须彼此匹配。
Interx中的错误(第63行)
C1 = FeVal(HF,D(BSXFUN(@次,DX1,Y2)-BSXFUN(@次,DY1,X2),S1),0);
Pixelize_collimator_aperture_v2中的错误(第107行)
p = Interx([x; y],[sqx; sqy]);
多边形是由42分组成的闭合曲线。
广场是一个封闭的方形曲线,由5分组成
这两条曲线的点数一定相同吗?你的描述里没有提到。
如果你愿意,我可以发送我的曲线和正方形。
谢谢你!
莫拉
Mindaugas(查看配置文件)
Interx函数如果输入自交叉点,则返回空气的空列表。
例如,Interx返回空列表,但自交叉点是[1 1]在此代码中:
x = [0 1 2 1 1];
Y =[1 1 1 2 0];
图;持有(上);
对于i = 1:长度(x)-1;绘图(x([i i + 1]),y([i i + 1]),'linewidth',i);结尾;
p = Interx([x; y])
威廉芦苇(查看配置文件)
R2019A中没有这样的命令
朱尔斯雷(查看配置文件)
它的工作,但并不像承诺那样快。在与“交叉点”函数的测试比较后给出相似的结果:
Interx =经过时间为10.502146秒。
交叉点=经过时间为10.567976秒。
两者都使用相同的两条由1200个点组成的曲线进行比较。
Dominik Mattioli.(查看配置文件)
苏打汗(查看配置文件)
嗨,我是matlab的新手,我在尝试运行这个代码时获得这个错误,有人请帮帮我。
\ users \ omar - pc \ desktop \算法问题\数据集\octave\code_samp的第176行附近的错误
les \ octave.m.
在此上下文中未实施的嵌套功能
函数u = D(x,y)
任何帮助都会受到欣赏,谢谢!
Kathryn Feller.(查看配置文件)
嗨,我正在尝试计算垂直线和两个数据向量描述的曲线之间的交叉点。这个功能似乎有效,但它给了我两套坐标,只有一个可能的十字路口给出了我输入的信息。也许这与曲线是一系列数据点而不是数学曲线的事实有关?因为曲线来自输入的DataPoints的列表,所以我尝试确定Y值的X值在两点之间。任何解密此输出的帮助都将是巨大的。
阿曼达Bernardy(查看配置文件)
我的matlab告诉我“interx”是一个未定义的功能
PIM van Mil.(查看配置文件)
杨璐(查看配置文件)
嗨,NS,
代码非常好。我找到了十字路口的价值,但现在我想找到索引。当我使用查找函数时,它找不到交叉点的正确索引,但是空值。你能帮我找到找到交叉点的正确索引的方法吗?
提前致谢!
杨。
AUREA94(查看配置文件)
JorgeCeledón.(查看配置文件)
这是matlab函数https://es.mathwands.com/help/map/ref/polyxpoly.html.
Manali Dodiya.(查看配置文件)
你好,我一直在下面得到错误。
使用Symengine时出错(第59行)
阵列大小必须匹配。
sym / privbinaryop中的错误(第903行)
csym = mupadmex(op,args {1} .s,args {2} .s,
变长度输入宗量{:});
错误。*(第238行)
X = privBinaryOp(A, B, 'symobj::zip', '_mult');
Interx错误(第60行)
s1 = dx1。* y1(1:end-1) - dy1。* x1(1:结束-1);
solve_equation错误(第28行)
p = Interx(L1,L2);
塞缪尔凯尔西(查看配置文件)
David Stolnis.(查看配置文件)
不起作用。有2行确实交叉,但我没有xing信息....空数组!看起来别人有幸了。
多米尼克(查看配置文件)
本穆罕默德(查看配置文件)
伟大的脚本-工作完美。我有一个问题-我有几个交叉计算,我想知道它将是多么容易的矢量计算,以提高代码性能?干杯,本
迈克尔雷岭(查看配置文件)
艾玛。SGHAIER(查看配置文件)
Leopoldo Brasil.(查看配置文件)
陈而调(查看配置文件)
Tinashe Martin Gonese.(查看配置文件)
Syed Ammar Abbas.(查看配置文件)
它给出了这两条线的交点。
L1 = [1152.3 1069.6;
559.6 - 656.1)
L2 = [1570.3 1564.1;
884.1 937.2]
ozan celik(查看配置文件)
嗨,代码非常好。谢谢!
我有一个问题,是否有可能使用此功能来查找传感器时尚的多条曲线的交点?假设我们有一组被存储为矩阵A的列的曲线,并且我们具有另一组存储作为矩阵B的列。是否可以找到与B的(:,i)的交叉点(:我)不使用循环?
sundar(查看配置文件)
工作完美!非常感谢代码。
Mahta Mazloumi.(查看配置文件)
它工作得非常好!谢谢你!
NedimGökhanAydin.(查看配置文件)
非常快,简单,有用。
尼科(查看配置文件)
ashutosh.(查看配置文件)
好奇在给定的函数中是什么?不断为未定义的变量D表示错误
Pushkar Mahajan.(查看配置文件)
伟大的。易于使用。非常感谢!!!
randika vithanage(查看配置文件)
如果线的兴趣超出给定的点,则无法处理
HiWave(查看配置文件)
作品伟大,然而知道当输入包含多个生物系统时交叉点是谁的
阿里Hassanzadeh(查看配置文件)
Ryan MeeEre.(查看配置文件)
然而,此代码非常适合,即使它们仅重叠,此代码也表示即使它们也相交。例如:
xA = [0 0 1];yA = [0 1 1];线= (xA; yA);
XB = [0 0.25 .25 0 0.25 .25。5 .5 1];YB = [0 .5 .5 .75 .75 1 1 .75 .75 1 1];LINEB = [XB; YB];
情节(xA,是的,xB, yB);
p = Interx(Linea,LineB)
P =
0 0 0 0.2500 0.5000
0.5000 0.7500 1.0000 1.0000 1.0000
我正在寻找一个代码,这些代码会说如果他们实际交叉,那么行就会相交。有任何想法吗?
迈克尔·曼(查看配置文件)
约书亚·柯林斯(查看配置文件)
格伦戈姆斯(查看配置文件)
亚历山大·赫尔曼(查看配置文件)
r p.(查看配置文件)
David Onywoki.(查看配置文件)
@jonathancamilleri问题是什么。我得到了同样的错误
郑增(查看配置文件)
KSSV(查看配置文件)
劳拉·伯科威茨(查看配置文件)
Bing Sen Tay(查看配置文件)
Samuel Petitjean.(查看配置文件)
Emrecan Yener.(查看配置文件)
令人敬畏的功能,谢谢!
元君赵(查看配置文件)
很棒的代码,对我有很大帮助!谢谢! !
Syed Hossain(查看配置文件)
Erik官员(查看配置文件)
很棒的代码!非常感谢!
阿布拉尔哈哈(查看配置文件)
Jonathan Camilleri.(查看配置文件)
忽略我以前的评论。意识到出了什么问题。
Jonathan Camilleri.(查看配置文件)
嗨,我正在尝试使用此功能,但我继续收到以下错误:
Interx错误(第60行)
s1 = dx1。* y1(1:end-1) - dy1。* x1(1:结束-1);
data_vis中的错误(第66行)
Inter = Interx(F1,F2);
但是,我的曲线,F1和F2都是相同的尺寸,25525 x 1双倍。#
有什么建议?
cebum(查看配置文件)
ph(查看配置文件)
希瑟(查看配置文件)
彭(查看配置文件)
在该示例中存在一些问题:
T = 0:PI / 200:2 * PI;
R1 = 2;x1 = r1。* cos(t)+2;Y1 = R1。* SIN(1 * T);
x2 = t;Y2 = T-3;
p = Interx([x1; y1],[x2; y2]);
绘图(X1,Y1,X2,Y2,P(1,:),p(2,:),'Ro')
轴相等
海蒂湖(查看配置文件)
asif asif(查看配置文件)
太好了!
是否可以获得交叉点以及逻辑向量,该逻辑矢量表示交叉点涉及的相应曲线/线?稍后,我想基于线/曲线为交叉点分配权重。
非常感谢任何帮助。谢谢!
博士(查看配置文件)
Blueposeidon1643(查看配置文件)
更详细的评论来。
tamásbalogh.(查看配置文件)
哈里斯巴布·帕兰卡纳拉(查看配置文件)
Hojoon Choo.(查看配置文件)
这正是我所寻找的。谢谢!
E. Cheynet.(查看配置文件)
纽丁(查看配置文件)
Brian Kim(查看配置文件)
顺便说一下,我想知道这个代码是否足够在非线性。
Farnaz Hajipour.(查看配置文件)
我怎样才能下载这个文件?
马蒂西亚斯(查看配置文件)
评论我的评论(见下文):当您不仅在分数中感兴趣而且在指数中,我现在想,这是最好不要使用“独特”或“unquetol”。(当您正在调查自交叉点时,这尤其重要。然后一个交叉点在I和J中的不同索引处导致P中的多个条目。)
否则,您可能会向指数I和J的指数松开正确的分配。
BBOYSLUG.(查看配置文件)
备注很好,因为您的绘制数据序列矩阵均具有相同的尺寸。我认为这是“它不起作用”的问题。对于我手头的任务,我的两个数据序列的尺寸不相同,因此它给出了一个horzcat错误。这将是更新代码的良好方法,如果它也可以使用与不同大小不同的两个矩阵/数据系列。:)
马蒂西亚斯(查看配置文件)
非常好,非常快。
我想我发现了一个次要的错误,只有您对预期交叉点的指数I和J感兴趣。
我建议替换第76行和77号线:
[p,ind] = Unquetol([Dx2(j)。* s1(i) - dx1(i)。* s2(j),dy2(j)。* s1(i) - dy1(i)。* s2(j)]./[L L],eps,'ByRows',true);
p = p';
我= i(ind)+1;
j =(印第安纳州)+ 1;
通过这种方式,对指数的分类也会分配排序(来自唯一或更好的Uniquetol)。此外,我将义肢增加1,但这或多或少的味道问题。
作为(查看配置文件)
Putiya Zarbafian.(查看配置文件)
TillmannStübler.(查看配置文件)
Vitor Ramalho de Brito(查看配置文件)
谢谢你这个梦幻般的代码。
阿施施(查看配置文件)
永寿梁(查看配置文件)
永寿梁(查看配置文件)
嗨,ns。谢谢你的优秀代码。它真的很快运行。但是,我也有问题是emil的问题。当输入点为2000多列时,它就会脱离内存。MATLAB的版本是2014A(Windows上的64位)。你能给我发给我修改的代码或给我一些建议吗?我的电子邮件是:liangys363@gmail.com。非常感谢。
埃里克五(查看配置文件)
谢谢。那太棒了。工作正常。
亚伯布朗(查看配置文件)
Jun Yon Ler.(查看配置文件)
这是行不通的。
乍得格林(查看配置文件)
这一功能证明对我非常有帮助。谢谢你分享,并感谢您编写如此漂亮的简洁的代码。
阿卜杜勒拉曼(查看配置文件)
太感谢了。伟大的算法和效果完美而超快。
无话语
Ilya(查看配置文件)
展示如何获取(全部)的“T”,它会出现“T”,这将是有帮助的。
即参数“t”的两个值对应于每个自交。
Ilya(查看配置文件)
展示如何获取(全部)的“T”,它会出现“T”,这将是有帮助的。
马修·阿切顿(查看配置文件)
我搜索了一个快速的交叉点函数,我找不到比这个更快的函数。
我有点惊讶的是,重复的子函数调用与它们在大曲线上的速度一样快。对一些运算进行矢量化可以加快函数的速度,但只适用于较小的曲线。
ns.(查看配置文件)
对Emil:谢谢你的评论。遗憾的是,除非用来循环,否则没有多少可以做到这一点,这可能很可能会延迟执行时间。
为了尽可能快地制作执行时间,我需要创建n×m矩阵,其中n和m是每个曲线中的段的数量。
也许您可以在File Exchange上尝试一些不使用矢量化的其他贡献,但它可能非常慢(对于这种大小的矢量,应该有4e10次交叉测试!)
或者,与我联系,向您发送修改我的代码以使用您的数据测试。但是,我无法保证结果的准确性,因为我没有对它进行广泛的测试,但似乎工作。
埃米尔奥尔森(查看配置文件)
我经常使用此功能来分析机置数据中的阈值交叉,我喜欢它!但是,自2012B在2012B上的64位Windows机器上,即使只测试20000列向量,我也会继续内存耗尽内存。解决这个问题的任何想法?
馅饼mes.(查看配置文件)
非常好,快速而多功能的代码。大UPS。
穆罕默德(查看配置文件)
嗨ns.
请忽略上述评论。我找到了一种方法并使用您的代码。
致以最亲切的问候。
穆罕默德(查看配置文件)
嗨ns.
谢谢你的份额。
在我的情况下,我在点数据表单中有两行。例如,我有3列的数据y,x1和x2。通过绘制和连接(X1,Y)而获得第一线L1,并且通过绘制和连接(X2,Y)获得第二线L2。
你能解释一下我怎样把这个点数据转换成这里描述的“两行矩阵”吗?
最好的事物
ns.(查看配置文件)
飞行员:是的,它应该处理这些情况。
飞行员(查看配置文件)
如果图形的段是垂直的段,则此代码是否会适应交叉点?
亚当(查看配置文件)
非常感谢这个功能!!在其他交集函数没有的地方正确工作!!
Jeroen van Nugteren他(查看配置文件)
缬草(查看配置文件)
Ayesha Sohail.(查看配置文件)
真的很有帮助…非常感谢
张燕祥(查看配置文件)
亚当(查看配置文件)
确实是它所说的。没问题。
Oguzcan.(查看配置文件)
有用、高效、快速