2016-04-07 3 views
1

ポイントが2点で定義された線の上または下にあるかどうかを計算しようとしています。明確にするために、ポイントが「この側」か「その側」にあるかどうかだけを知る必要があります。ラインが完全に垂直であれば、「上」または「下」はなくなります。 (centerX、centerY)(xprime、yprime)という2つの点で定義された行があります。簡略化のためにcenterX、centerYは(0,0)に変換することができます。私は(mouseX、mouseY)がその行の上か下であるかどうかを調べたいと思います。Javascript点が2点で定義された線の上または下にあるかどうかを調べる

この式を使用しようとしましたが、期待した結果が得られません。 位置ため

var position = Math.sin((xprime -centerX) * (mouseY - centerY) - (yprime - centerY) * (mouseX - prime)); 

値がするmouseX、mouseYの値は線回りに回転として正から負にランダムに振動するように見えます。マウスの位置(mouseX、mouseY)がラインを越えると、符号が1回正から負に変化する印象を受けました。線より上の値は正であり、下の値は負である。

私はこのコードを数式とともに使用して、元のクリックからのたわみ角を決定しています。しかし、マウスが最初のクリック以上になったかどうかを判断することはできません。 (もう一度 "上"と "下"とお考えください)

答えて

2

クロスプロダクトのプロパティを利用する単純なソリューションです。

dx = xprime - centerX 
dy = yprime - centerY 
mx = mouseX - centerX 
my = mouseY - centerY 
cross = dx * my - dy * mx //zero means point on line 
below = (cross > 0)   //mouse is "at the right hand" of the directed line 
if dx <> 0 then    // check for vertical line 
    if dy/dx < 0 then   //negative slope, invert result 
    below = not below 
0

私はあなたに一般的な解決策を提供しようとします。正確なポイントは、ラインの機能上または下にあるかどうかを確認する方法

は想像し、私たちはラインf(x) = 4x + 2を持っています。チェックが必要な場合は、点の下または上に点(x1, y1)がある場合、f(x1)を計算し、y1と比較する必要があります。

f(x1) > y1の場合、それはその行の下の(x1, y1)を意味します。

の場合f(x1) < y1は、上記の行の上にポイント(x1, y1)を意味します。

の場合f(x1) = y1 - ライン上の点。あなたはプロットで見ることができる

enter image description here

すべてのライン機能を使用すると、正確なライン機能を知ることがkb定数を知る必要がある、f(x) = k * x + bのように見える、そう。 2点のライン機能を取得する方法

はポイントA (x_a, y_a)B (x_b, y_b)を想像し、私たちはラインの機能を取得したい、我々は2つの方程式系解く必要があります。

y_a = k * x_a + b

y_b = k * x_b + b

これは非常に簡単です。kbを知った後で、以下の点を確認することができますAB

関連する問題