Liegt Punkt innerhalb eines Rechtecks

Gegeben sind die vier Eckkoordinaten eines Rechtecks. Wie kann ich herausfinden, ob ein beliebiger Punkt innerhalb oder außerhalb dieses Rechtecks liegt? Gibt’s für sowas einen Algorithmus? (entsprechende Links würden mir schon reichen).

Danke,

Ralf

Hallo,

das ist nicht schwer.

// Feststellen, ob ein Punkt in einem Rechteck ist

BOOL PtInRect(CPoint point, CRect rect)
{
if (point.xrect.right) return FALSE;
if (point.yrect.top) return FALSE;
return TRUE;
}

Dabei muss darauf geachtet werden, dass left[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Moriarty,

BOOL PtInRect(CPoint point, CRect rect)

ähm… sorry, habe mein Problem falsch formuliert. Die Lösung von Dir stimmt natürlich, allerdings nur für Rechtecke, deren Seiten parallel zu den Koordinatenachsen verlaufen.
Mein Problem ist: ich gehe von einer Linie in der Ebene aus, also eine Verbindung zwischen zwei beliebigen Punkten, und suche für einen weiteren gegebenen Punkt, ob er einen Mindestabstand von der Linie unterschreitet. Mein Lösungsansatz wäre, mit entsprechendem Mindestabstand links und rechts der Linie ein Rechteck zu definieren und dann zu prüfen, ob der Punkt innerhalb des Rechtecks liegt.
Genaugenommen suche ich den kleinsten Abstand eines Punktes von einer gegebenen Strecke in der Ebene, also das Lot darauf.

Gruss,
Ralf

Genaugenommen suche ich den kleinsten Abstand eines Punktes
von einer gegebenen Strecke in der Ebene, also das Lot darauf.

dann mach ein dreieck draus!

Für Strecke AB und Punkt C Lotpunkt L
gilt

AL/AC=BL/BC
&
AL+BL=AB =>BL=AB-AL

AL/(AB-AL)=AC/BC => nur noch eine gesucht grösse

AL reicht für exakte Bestimmung von L

Hallo Ralf,

Genaugenommen suche ich den kleinsten Abstand eines Punktes
von einer gegebenen Strecke in der Ebene, also das Lot darauf.

dann solltest Du das auch gleich so schreiben und nicht erst mit irgendwelchem Rechteckkram Verwirrung stiften.

Wenn Du eine Gerade hast, die durch die Punkte P1(x1|y1) und P2(x2|y2) verläuft, sowie einen weiteren, irgendwo gelegenen Punkt Q(x0|y0), dann ist der „Abstand“ d, den Q von der P1-P2-Gerade hat (= Länge des Lotes von Q auf die Gerade), gegeben durch

 m (x0 - x1) - y0 + y1 y2 - y1 
d = ----------------------- wobei m := ---------
 sqrt(m<sup>2</sup> + 1) x2 - x1

(„sqrt“ = „square root“ = Quadratwurzelfunktion)

Siehe beliebige Formelsammlung (ab Abiturniveau), Kapitel „Analytische Geometrie in der Ebene“, Abschnitt „Geraden“.

Mit freundlichem Gruß
Martin

Für Strecke AB und Punkt C Lotpunkt L gilt

AL/AC=BL/BC

Wäre mir neu, daß das gilt.

Gruß
Martin

mir auch, skizze war falsch,sry

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Bin ja kein Mathe-Profi, aber ich glaube mich erinnern zu können, dass die Bestimmung, ob ein Punkt innerhalb eines Vielecks (nicht notwendigerweise regelmässig) erfolgen kann, indem man vom Punkt aus einen Strahl in eine beliebige Richtung legt und dann prüft, wie viele Seiten der Strahl schneidet. Ist die Anzahl ungerade liegt der Punkt innerhalb, ist sie gerade (oder Null), dann ausserhalb.

Für spezielle Vielecke lässt sich das dann eventuell vereinfachen (wenn das Vieleck z.B. regelmässig ist, dann muss kann die Anzahl der Schnittpunkt nur noch 0, 1, oder 2 sein).

Gruss
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Abstand Punkt - Gerade
Hallo,

Der Abstand d eines Punktes P von einer Geraden durch A nach B berechnet sich:
V_x = B_x - A_x
V_y = B_y - A_y
d = abs( (P_x - A_x)*V_y - (P_y - A_y)*V_x ) / sqrt(V_x*V_x+V_y*V_y)

Gruß
Moriarty