Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 25.11.02 03:16 
Hi,

user defined image

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
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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,

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: 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.

user defined image

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.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.


Zuletzt bearbeitet von OregonGhost am Mo 25.11.02 21:37, insgesamt 1-mal bearbeitet
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mo 25.11.02 20:39 
Danke :)