而其他一些功能已经存在于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中央文件交换。检索。
除了由帕特里克•Forssen评论:
第68行更改为:
如果isempty (i), P = 0 (2,0); i = []; j =[];回归;结束;
所以修改的功能仍然工作,即使两条曲线不相交
谢谢NS。
你能帮我详细了解C1和C2或逻辑理论。
为什么我不能使用这个函数找到任何两条直线的交点?
伟大的提交!失踪的一件事是指数的交叉部分。但是,这很容易固定用一些小代码修改。改变函数头,
[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”。
完美的工作。非常感谢。
嗨,NS,
我试着翻译它fortran。你能帮我详细了解C1和C2或背后的逻辑理论吗?
伟大的功能。我用它来阅读自动化的轴曲线相交于一条水平线。它运行良好后指令后INTERX (L1, L2)。
高度的功能。
谢谢你这个非常有用的函数。
我只需要确定一组以上的交集点(即减少线功能。,负斜率)。我怎么能改变这段代码达到这些点吗?
问候,
一个非常有用的功能。谢谢!
你好,
我试着你的代码发现如果一个广场上闭合曲线的交点(多边形)。我得到以下错误:
错误使用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点组成
必须两条曲线有相同数量的点吗?这不是你的描述中指定。
如果你喜欢我可以发送我的曲线和广场。
谢谢你!
莫拉
什么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点。
你好,我是新Matlab,我得到这个错误在运行这段代码,请帮助我的人。
解析错误176年线附近的文件数据集\ \八度\ code_samp C:\Users\Omar-PC\Desktop\Algo问题
les \ octave.m
在这个背景下嵌套功能没有实现
> > >函数u = D (x, y)
任何帮助将是感谢,谢谢!
嗨,我想计算一条垂直线和一条曲线所描述的两个向量的数据。这个函数似乎工作,但它给我两套坐标,只有一个可能的十字路口给我输入的信息。也许这是有关事实数据点的曲线是一个数组而不是一个数学曲线?因为从列表曲线进入据点,我试图确定的x值是两点之间的y值。任何帮助破译这个输出将是巨大的。
我的matlab告诉我“InterX”是一个未定义的函数
嗨,NS,
代码很好的工作。我发现十字路口的价值,但现在我想找到索引。当我使用find函数,它没有找到合适的索引的交集点,但空值。你能帮我找到的方法找到合适的索引的十字路口?
提前谢谢!
杨。
这是matlab函数https://es.mathworks.com/help/map/ref/polyxpoly.html
你好,我越来越错误如下。
错误使用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);
不工作。确实有两线交叉但没有兴信息....空数组!看起来像人的运气。
伟大的脚本——完美的工作。我有一个问题,我有几个十字路口来计算,我在想会是多么容易vectorise计算来提高代码的性能?干杯,本
它是空的交点做interestect时对这些行。
L1 = [1152.3 - 1069.6;
559.6 - 656.1)
L2 = [1570.3 - 1564.1;
884.1 - 937.2)
嗨,代码很好的工作。谢谢!
我有一个问题,是否可以使用这个函数来找到的交集多个曲线矢量化的方式?说我们有一组曲线存储矩阵的列和我们另一组曲线存储的列矩阵B是可能找到的交集(:,i)和B(:,我)不使用for循环?
完美的工作!非常感谢代码。
它工作得很好!谢谢你!
很快,简单而有用。
好奇' D '在给定的函数是什么?给错误未定义变量D
太好了。易于使用。非常感谢! ! !
不能处理如果行利益超越给定的点
工作很好,但是会很高兴知道十字路口是谁输入包含多个cureves时
这段代码的作品不错,不过,这段代码只说线相交,即使他们重叠。例如:
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
我在找一个代码,只说,行如果他们确实十字相交。什么好主意吗?
@JonathanCamilleri是什么问题。我得到同样的错误
很棒的功能,谢谢!
伟大的代码,帮助我很多!谢谢! ! !
伟大的代码!谢谢!
忽略我之前的评论。意识到什么是错误的。
你好,我想要使用这个函数但我得到以下错误:
错误InterX(60)行
S1 = dx1。* y1 (1: end-1) -₁。* x1 (1: end-1);
错误data_vis(第66行)
国米= InterX (f1、f2);
然而,我的曲线,f1和f2都是相同的大小,25525 x 1双#
有什么建议吗?
一些问题的例子:
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:),“罗”)
轴平等
太好了!
有可能获得交集点以及一个逻辑向量表示相应的曲线/参与交叉的点行吗?以后,我想分配权重基于直线或曲线相交点。
感谢任何帮助。谢谢!
更详细的评论。
这正是我在寻找的。谢谢!
顺便说一下,我想知道这段代码是在非线性的倡导。
我可以下载这个文件吗?
评论我的评论(见下文):当你有兴趣不仅在指数中的点,还那么我现在认为,这是最好不要使用‘独特’或‘uniquetol’。(这是特别重要的,当你正在调查自交。然后一个交点导致多个条目P不同指数i和j)。
否则你可能会宽松的正确分配点指数i和j。
工作良好,绘制数据系列的两个矩阵是相同的大小。我认为这是问题的“不工作”的家伙跑进。我手头的工作,我的两个数据系列不一样大小,所以它给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,但这是或多或少的味道。
谢谢你这宏伟的代码。
嗨,NS。谢谢你这个优秀的代码。它运行非常快。然而,我也有问题的埃米尔。当输入点向量超过20000列,它是内存不足。我的matlab是2014的版本(64位windows上)。你可以寄给我修改的代码或者给我一些建议吗?我的电子邮件:Liangys363@gmail.com。非常感谢。
谢谢。太好了。工作很好。
它不工作。
这个函数已经被证明对我很有帮助。谢谢你的分享,谢谢你写这样的漂亮,整洁的代码。
非常感谢。伟大的算法和作品完美和超级快。
说不出话来
它将有助于显示如何让“t”的(全部)值,十字路口的发生。
即“t”的两个值参数对应于每个自交。
它将有助于显示如何让“t”的(全部)值,十字路口的发生。
我寻找一个快速路口函数,我找不到一个比这更快。
我有点惊讶,重复的子函数调用是一样快的大曲线。Vectorising加速功能的一些操作,但只有较小的曲线。
埃米尔:谢谢你的评论。不幸的是没有多少可以做,除非使用for循环,这可能会大大延迟执行时间。
执行时间尽快,我需要创建N x M矩阵,其中N和M是在每个曲线段的数量。
也许你可以试试其他的贡献在文件交换,不利用向量化,但它可能会非常缓慢(十字路口应该有大约4 e10测试向量的大小!)
另外,联系我给你发送一个修改我的代码来测试您的数据。然而,我不能保证结果的准确性,因为我没有做广泛的测试,但似乎工作。
我经常使用这个函数来分析跨越门槛的运动数据,我爱它!然而自2012年使用b在64位windows机器上我一直耗尽内存,即使只是测试20000列向量。任何想法修复吗?
非常好,快和通用的代码。大的UPS。
嗨NS
请忽略上面的评论。我已经找到了一种方法,使用您的代码。
致以最亲切的问候。
嗨NS
谢谢你的分享。
在我的例子中,我有两条线的点数据形式。例如,我有3列数据的Y, X1和X2。第一行L1通过绘图和连接(X1, Y)和第二行L2通过绘图和连接(X2, Y)。
你能解释我怎么这个点数据转换为“two-row-matrices”这里所描述的那样。
最好的
飞行员:是的,它应该处理这些案件。
这个代码适应路口点如果线段图的垂直?
非常感谢这个函数! ! !工作正确,其他交叉功能没有! !
非常有用的.....非常感谢
什么它说。没有问题。
有用的,有效的,而且要快