2017-05-09 236 views
0

我得到了两条曲线,如this plot
确定两条曲线是否互相重叠

我想找到他们重叠的时间间隔。 对于此图,重叠间隔为[5.2,6.8]。 我的解决办法是:

  • 为蓝色跟踪每两个连接点(得到线性函数,调用它1号线)
  • 我都会搜索,有没有从橙色曲线秋季任何点这个范围。
  • 如果我找到一个,那么这个点和这个点之前的点,将会形成一条线(得到线性函数,称之为线2)。
  • 找到第1行和第2行的交点。
  • 如果交点在第1行和第2行的最小范围内,它们相交。
  • 如果不是使用由此点创建的线和点之后的点执行相同的过程。
  • 最后,循环遍历蓝色轨迹上的所有点。

我想知道有没有其他有效的方法来解决这个问题?
我想python和matlab可能有内置函数来实现这个功能,但是我正在用JavaScript写这个,所以有什么建议吗?
谢谢!

+0

听起来不太糟糕。我会给它一个镜头。 – f1sh

+0

起初java!=== javascript –

+0

图片不对,我会试着修复它 – MaXon

回答

0

也许简单地得到接近路口这样的:

//given two functions (in a math way) f1,f2 
var compared=f1(0)<f2(0); 
var intersections=[]; 
for(range=0;range<1000;range+=0.001){ 
    if(compared!==(f1(range)<f2(range))){ 
    intersections.push(range); 
    compared!=compared; 
    } 
} 

这种方法适用于所有种类的功能,但如果我们促成了一组线性函数,我们可以做一些简单的数学得到的过境点:

f1(x) = a1 * x + b1; 
f2(x) = a2 * x + b2; 
f1(x)=f2(x) 
a1 * x + b1 = a2 * x + b2 | -b1 -(a2*x) 
a1 * x - a2 * x = b2 - b1 | :(a1-a2) 
x= (b2-b1)/(a1-a2); 
+0

f1和f2代表什么?两点产生的线性函数? – MaXon

+0

@MaXon是吗?如果它真的是线性的,我们可以做基本的数学...(你的不是线性的) –

+0

我明白底部,找到交点 – MaXon