Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 11:38

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Polygon collision
BeitragVerfasst: So Apr 11, 2010 19:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
Hi,
ich bastle gerade an einer Menü Klasse für meine Spiele, dabei bin ich jetzt bei einem Polygon Button angekommen. Ich weis jetzt leider nicht wie ich bei einem Polygon auf Klicks prüfen kann. Bis jetzt bin ich dabei den Punkt den ich habe über eine Strecke des Polygons zu spiegeln und den neuen Punkt nochmals nach hinten zu verschieben, so dass er nicht im Polygon liegen kann. Meine Überlegung war jetzt, das wenn er im Polygon liegt er immer nur eine ungerade Zahl an linien schneidet, wenn nicht eine gerade. Hat jemand eine bessere Idee, Color-Picking kann ich leider nicht verwenden, da die Prüfung eventuell in einem extra Thread läuft, mit kann auch die Idee es in einer normalen Bitmap zu zeichnen, ich weis allerdings nicht ob das schneller ist.

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Polygon collision
BeitragVerfasst: So Apr 11, 2010 19:56 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich dachte wir hätten da hier im Forum eine passende Lösung gehabt.

Zumindest konnte ich das finden: http://www.delphigl.com/forum/viewtopic.php?f=3&t=3013

Aber ich glaube es gab nochmal einen recht simplen und performanten Ansatz...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Polygon collision
BeitragVerfasst: So Apr 11, 2010 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ok, mangels Angaben deinerseits muss ich einige Annahmen treffen:
1. Wir rendern hier von 2D, also nicht irgendwelche im Raum schwebenden 3D-Buttons.
2. Deine Buttons sind nicht einfach Quader...in dem Fall würdest du wohl nicht fragen den das ist trivial. (Einfach min/max des Buttons mit dem Punkt vergleichen)

Also deine Idee mit dem Strahl ist gar nicht so schlecht. Allerdings musst du da nichts spiegeln und nochmals nach hinten verschieben, was immer du damit meinst ;)

Nehmen wir an dein Punkt, also der Cursor ist gegeben als (CX, CY). Jetzt betrachten wir den Strahl von diesem Punkt aus in Richtung (0, 1), also nach oben (oder unten...völlig egal). Jetzt berechnest du die Schnittpunkte aller Kanten deines Polygons mit diesem Strahl. Bei einer ungeraden Anzahl Schnittpunkte befindest du dich innerhalb, sonst außerhalb.

Edit:
Alternativ kannst du dein Polygon auch in Dreiecke aufteilen und dann diese Funktion benutzen:
Code:
/** checks if point P is inside triangle ABC. */
template<class T> inline bool pointInTriangle2D(const Vector2<T>& A, const Vector2<T>& B,
                                                const Vector2<T>& C, const Vector2<T>& P)
{
   Vector2<T> AB = B - A;
   Vector2<T> BC = C - B;
   Vector2<T> CA = A - C;
   // %-Operator is 2D cross product, *-Operator is 2D dot product
   bool inside  = (AB % CA)*(AB % (P-A)) <= 0;
        inside &= (BC % AB)*(BC % (P-B)) <= 0;
        inside &= (CA % BC)*(CA % (P-C)) <= 0;
   return inside;
}

_________________
Yeah! :mrgreen:


Zuletzt geändert von Coolcat am So Apr 11, 2010 20:09, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Polygon collision
BeitragVerfasst: So Apr 11, 2010 20:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Okt 16, 2008 13:18
Beiträge: 252
@Flash:Ok, den Thread hatte ich übersehen. Ich überdenke dann nochmal meine Variante.
@Coolcat: Das meinte ich, ich hatte nur vor statt einer Geraden eine Strecke zu benutzen

_________________
You even trying ...

Website: http://rise-of-light.de/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Polygon collision
BeitragVerfasst: So Apr 11, 2010 20:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
(hatte nochmal editiert...siehe oben)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]