Punkt inerhalb eines rotierten Vierecks?
Übersicht

WandererBetreff: Punkt inerhalb eines rotierten Vierecks? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
2) wenn du 1 hast, hast du das umsonst, da du einfach die 4 eckpunkte überprüfst ![]() 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 ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] a%=millisecs()
for idx% = 0 to 1000000 ;PointInQuad() next print millisecs() - a% |
||
Norweger...
Spreche aber verdammt gut 8086 |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok danke, werd ich mal ausprobieren | ||
Denken hilft! |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ä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! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group