2017-05-09 9 views
0

this plotのような2つのトレースがあります。
2つのトレースが互いにオーバーラップしているかどうかを確認します

どの間隔で重複しているかを見つけたいと思います。 このプロットでは、重なり間隔は[5.2,6.8]になります。 私の解決策は次のとおりです、私はを探します青色のトレース上のすべての接続された2つのポイント(ライン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; 
        } 
    } 
    

    このアプローチでは、機能のすべての種類のために動作しますが、weveは線形関数のセットを得た場合、我々はいくつかの簡単な数学をすることによって交差点を取得することができます。

    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は何を表していますか?線形関数は2点で生成されますか? – MaXon

    +0

    @MaXonはい?私たちは基本的な数学を行うことができます...(あなたのものは線形ではありません) –

    +0

    私は底の部分を理解しています、それは交差点を見つけることです – MaXon

    関連する問題