Entwickler-Ecke
Sonstiges (Delphi) - Kleines Matheproblem - 2
Aya - Mo 25.11.02 03:16
Titel: Kleines Matheproblem - 2
Hi,
Gegeben sind die X und Y Koordinaten von A,B,C,D,P1,P2.
Wie bekomme ich raus ob sich P1 bzw. P2 innerhalb des Rechteckes befinden???
Au'revoir,
Aya
Anonymous - Mo 25.11.02 09:55
Ist das ein Matheproblem oder Programmtechnisches Problem? Für das eine Braucht man Formeln für das andere gibts Funktionen.
Delete - Mo 25.11.02 12:35
@Popov: PtInRect läßt sich nur auf ein nicht gedrehtes Rechteck anwenden. Falls du das mit
| Zitat: |
andere gibts Funktionen.
|
meinst.
Mein Vorschlag wäre das ganze zu drehen und dann OtInRect darauf anwenden. Wie man Punkte dreht, haben wir ihr ja lang und breit erklärt.
Anonymous - Mo 25.11.02 13:00
| Luckie hat folgendes geschrieben: |
@Popov: PtInRect läßt sich nur auf ein nicht gedrehtes Rechteck anwenden. Falls du das mit
| Zitat: |
andere gibts Funktionen.
|
meinst. |
Nein, ich meinte PtInRegion. Hab es zwar noch nicht angewand,
Quelltext
1:
| function PtInRegion(Rgn: HRgn; X, Y: Integer): Bool; |
sieht aber nicht viel anders aus wie PtInRect. Das einzig komplizierte wird das Erstellen der Region sein. Obwohl so kompliziert ist das auch nicht.
PS: Ich sollte dir Bescheid sagen.
Aya - Mo 25.11.02 17:30
Hi,
es ist ein Mathematisches Problem.. das ganze dann in Delphi reinzubekommen ist kein problem
Und ich weiß das es eigentlich ne recht einfache Formel ist, denn früher im Mathe unterricht haben wir mal irgendwie sowas gemacht, nur ich erinner mich kein bisschen mehr daran.... :oops:
Au'revoir,
Aya
PS: Die sache mit dem, das ich alles drehe bis es gerade steht geht zwar sicherlich, aber ist nicht die beste lösung.... :)
OregonGhost - Mo 25.11.02 20:32
Das ist relativ einfach. Du musst für jede der Seiten überprüfen, auf welcher Seite davon der Punkt liegt. Liegt er bei allen auf der Innenseite, liegt er auch im Rechteck. Und das geht so, für jede Seite:
1. Seite in Gerade umwandeln, und zwar in Parameterform:
g1: x = s + p1 * r1
Dabei ist s für die erste Gerade A, für die zweite B etc.
r1 ist dann (B-A), (C-B) etc.
2. Senkrechten Vektor zu Vektor r1 finden (Punktprodukt):
cos(90°) = 0 = (r1 * r2) / (|r1| * |r2|)
Dabei gilt: Zähler muss 0 sein, damit das ganze 0 ist.
3. Gerade in Parameterform erstellen, die r2 als Richtungsvektor und P als Stützvektor hat:
g2: x = P + p2 * r2
4. Schnittpunkt g1 g2 berechnen:
s + p1 * r1 = P + p2 * r2
5. Wenn du immer im Uhrzeigersinn gehst, wird der Parameter p2 immer positiv oder negativ sein für den Schnittpunkt. Das musst du mal ausprobieren, davon ist dann abhängig, auf welcher Seite der Geraden der Punkt P liegt.
Im R³ wird's übrigens einfacher, weil man r2 entweder schon hat (wenn man die Ebenen als Normalenform hat) oder direkt aus dem Kreuzprodukt der beiden Richtungsvektoren bekommt.
Aya - Mo 25.11.02 20:39
Danke :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!