2016-04-07 8 views
1

Ich versuche zu berechnen, ob ein Punkt über oder unter einer Linie liegt, die durch zwei Punkte definiert ist. Zur Klarstellung muss ich nur wissen, ob der Punkt auf "dieser Seite" oder "dieser Seite" steht. Ich erkenne, wenn die Linie perfekt vertikal ist, wird es kein "oben" oder "unten" geben. Ich habe eine Linie durch zwei Punkte definiert (centerX, centerY) und (xprime, yprime). Zur Vereinfachung centerX kann centerY in (0,0) umgewandelt werden. Ich möchte feststellen, ob (mouseX, mouseY) über oder unter dieser Linie ist.Javascript Ermitteln, ob ein Punkt über oder unter einer durch zwei Punkte definierten Linie liegt

Ich habe versucht, diese Formel zu verwenden, aber es gibt mir nicht die Ergebnisse, die ich erwartet habe.

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

Die Werte für Position scheinen zufällig von positiv auf negativ als mouseX, mouseY Werte drehen sich um die Linie zu schwingen. Ich hatte den Eindruck, dass sich das Vorzeichen einmal von positiv zu negativ ändern würde, wenn die Mausposition (mouseX, mouseY) die Linie überquerte. Werte über der Linie wären positiv und Werte darunter wären negativ.

Ich verwende diesen Code in Verbindung mit einer Formel, um den Ablenkungswinkel vom ursprünglichen Klicken zu bestimmen. Aber ich kann nicht feststellen, ob sich die Maus jetzt über dem anfänglichen Klick oder darunter befindet. (bitte entschuldigen Sie "oben" und "unten")

Antwort

2

Einfache Lösung ausnutzen Cross Produkteigenschaften.

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

Ich werde versuchen, Ihnen allgemeine Lösung zu geben.

Wie oben oder unten Linienfunktion, wenn genaue Punkt ist zu überprüfen:

Man stelle sich vor, wir haben f(x) = 4x + 2 Linie. Wir müssen überprüfen, ob Punkt (x1, y1) unter oder über der Linie, wir müssen berechnen f (x1) und vergleichen Sie es mit y1.

wenn f(x1) > y1 bedeutet dies, dass (x1, y1) unter der Linie.

wenn f(x1) < y1 bedeutet Punkt (x1, y1) über der Linie.

wenn f(x1) = y1 - auf einer Linie zeigen.

Sie auf der Parzelle sehen:

enter image description here

Alle Leitungsfunktionen sieht aus wie f(x) = k * x + b, so, was Sie wissen müssen k und b Konstanten genaue Linienfunktion zu kennen.

Wie Linienfunktion durch zwei Punkte zu bekommen:

Punkte Stellen A (x_a, y_a) und B (x_b, y_b) und wir wollen Linienfunktion erhalten, müssen wir System von zwei Gleichungen lösen:

y_a = k * x_a + b

y_b = k * x_b + b

Das ist sehr einfach.Nachdem Sie wissen, k und b und nach können Sie überprüfen, ob Punkt unter oder über AB Linie

Verwandte Themen