Punkt inerhalb eines rotierten Vierecks?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Wanderer

Betreff: Punkt inerhalb eines rotierten Vierecks?

BeitragSa, Nov 06, 2004 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein bisschen knifflig -habe gerade folgendes Problem: Ich habe ein Viereck (2D), das aus vier Eckpunkten besteht:

x1,y1 = oben links
x2,y2 = oben rechts
x3,y3 = unten rechts
x4,y4 = unten links

1.) Wie finde ich heraus, ob eine bestimmte XY-Koordinate sich inerhalb dieses Vierecks befindet, wenn dieses Viereck auch noch gedreht ist?

2.) Und um das ganze noch schwieriger zu machen - wie finde ich zusätzlich heraus, ob ein anderes gedrehtes Viereck sich mit diesem Viereck überschneidet?

Mir raucht schon total der Kopf... wäre selbst für einen Ansatz dankbar...
 

Dreamora

BeitragSa, Nov 06, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
2) wenn du 1 hast, hast du das umsonst, da du einfach die 4 eckpunkte überprüfst Smile

1) Ist ein wenig kniffliger als 2), aber im Endeffekt nur 4 lineare Gleichungen.
x,y ist dabei der Punkt von dem man wissen will ob er drin liegt:

y1 = float( y2 - y1 ) /( x2 - x1 ) * (x - x1 ) + y1
y2 = float( y4 - y1 ) /( x4 - x1 ) * (x - x1 ) + y1

y3 = float( y2 - y3 ) /( y2 - y3 ) * (x - x3 ) + y3
y4 = float( y4 - y3 ) /( y4 - y3 ) * (x - x3 ) + y3

nun muss der punkt nur kleiner als y1 und y3 und grösser als y2 und y4

dabei gibts noch 1-2 spezialfälle die du dur selbst überlegen musst, sollte jedoch für den anfang schonmal reichen Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Vertex

BeitragSa, Nov 06, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu erstens:
Das Rechteck hat die Eckpunkte A, B, C und D. Der Punkt P liegt genau im Viereck, wenn die Summe aus den Winkeln P-A, P-B, P-C und P-D 360 Grad ergeben.
mfg olli
vertex.dreamfall.at | GitHub

stfighter01

BeitragSa, Nov 06, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
@vertex das ist genial

theoretisch müsste das doch auch für vielecke funktionieren wenn man die entsprechende winkelsumme einsetzt oder?

mfg stfighter
Denken hilft!
 

Wanderer

BeitragSa, Nov 06, 2004 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Hilfe! Damit hat's bei mir auch funktioniert:

Code: [AUSKLAPPEN]

Function PointInsideQuad (x,y,  x1,y1,x2,y2,x3,y3,x4,y4)
   If ((y - y1) * (x2 - x1)) - ((x - x1) * (y2 - y1)) <= 0 Then Return 0
   If ((y - y2) * (x3 - x2)) - ((x - x2) * (y3 - y2)) <= 0 Then Return 0
   If ((y - y3) * (x4 - x3)) - ((x - x3) * (y4 - y3)) <= 0 Then Return 0
   If ((y - y4) * (x1 - x4)) - ((x - x4) * (y1 - y4)) <= 0 Then Return 0
   Return True
End Function


Was dürfte denn am schnellsten sein?

eXceptION

BeitragSa, Nov 06, 2004 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
a%=millisecs()
for idx% = 0 to 1000000
  ;PointInQuad()
next
print millisecs() - a%
Norweger...

Spreche aber verdammt gut 8086

Vertex

BeitragSa, Nov 06, 2004 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Dreieck müssten es 180 Grad sein. Ich denke mal auch, das es mi anderen Polygonen geht, jedoch müssten diese Konvex sein.
mfg olli
vertex.dreamfall.at | GitHub

stfighter01

BeitragSo, Nov 07, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke, werd ich mal ausprobieren
Denken hilft!

Ctuchik

BeitragSo, Nov 07, 2004 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm, der Winkel zu was? Zur x-Achse oder wie? P-A is doch nur ne Gerade!?! Für nen Winkel brauchts aber 2 Geraden!
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle!
Fraget euren Arzt oder Apotheker!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group