Punkt innerhalb Polygon?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Ratchet

Betreff: Punkt innerhalb Polygon?

BeitragSa, Jan 08, 2005 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe eine TList die Punkte enthält, also X und Y Koordinaten. Das passiert mit Hilfe einen TPoint Types.
Jetzt ergeben die Punkte der Liste ein Polygon welches ich mit DrawPoly auch darstellen kann. Jetzt möchte ich feststellen ob sich z.B. meine Maus innerhalb des Polygons befindet. habe dazu auch schon einen Quellcode bei Blitzbase.de gefunden, allerdings arbeitet der mit Banken als Speicher für das Polygon und ich weiß nicht genau wie ich das umschreiben soll. Hier mal der Link: http://www.blitzbase.de/quellcode/pointinarea.bb
Was muß ich denn machen damit das mit meiner TList zusammen funzt?
Danke schon mal!

TheShadow

Moderator

BeitragSo, Jan 09, 2005 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
statt in bank die koordinaten zu speichern, kannst du auch in deiner liste speichern...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Ratchet

BeitragSo, Jan 09, 2005 2:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mache ich ja bereits. Was ich nicht ganz verstehe wie du sie wieder ausliest. Du nimmst da was mal 8 und so. Ich weiß nicht wie ich es auf meine Liste umprogrammieren soll.

TheShadow

Moderator

BeitragSo, Jan 09, 2005 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ganz einfach - ich brauche pro punkt eine x und eine y-koordinate. da diese je 4 byte lang sind, benötige ich pro punkt 8 byte

offset
0 = x punkt 1
4 = y punkt 1
8 = x punkt 2
12 = y punkt 2
usw...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Ratchet

BeitragSo, Jan 09, 2005 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, das wollte ich ja nur wissen. Jetzt konnte ich es auch umschreiben. Hier mal der Code:

Code: [AUSKLAPPEN]

Type TPoint
   Field X: Int
   Field Y: Int
End Type

Function PointInArea(x: Int, y: Int)
      Local Poly: Float[]
      Local Count: Int
   
      'Punkt Array erstellen   
      For Point: TPoint = EachIn PointList
         Poly = New Float[PointList.Count() * 2]
         i = 0
         For Point = EachIn PointList
            Poly[i] = Point.X
            i :+ 1
            Poly[i] = Point.Y
            i :+ 1
         Next
      Next      

      'Pruefen ob der Punkt innerhalb der Action liegt
      Count = PolyList.Count()
      For i = 1 To Count
         If i = Count Then
            TmpX = Poly[0]
            TmpY = Poly[1]
         Else
            TmpX = Poly[i*2]
            TmpY = Poly[i*2+1]
         EndIf
         If (TmpX - Poly[i*2-2]) * (y - TmpY) - (x - TmpX) * (TmpY - Poly[i*2-1]) > 0 Then Checked = Checked +1
      Next
      Return (Checked = Count)


In Wandel meine PointListe zuerst in ein Array um welches DrawPoly auch gleich verarbeiten kann. Dann noch TheShadows PointInArea Function und schon klappts.

DANKE!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group