Punkt innerhalb Polygon?
Übersicht BlitzMax, BlitzMax NG Allgemein
RatchetBetreff: Punkt innerhalb Polygon? |
Sa, Jan 08, 2005 23:29 Antworten mit Zitat |
|
---|---|---|
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! |
||
TheShadowModerator |
So, Jan 09, 2005 0:19 Antworten mit Zitat |
|
---|---|---|
statt in bank die koordinaten zu speichern, kannst du auch in deiner liste speichern... | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Ratchet |
So, Jan 09, 2005 2:30 Antworten mit Zitat |
|
---|---|---|
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. | ||
TheShadowModerator |
So, Jan 09, 2005 13:37 Antworten mit Zitat |
|
---|---|---|
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 |
So, Jan 09, 2005 15:22 Antworten mit Zitat |
|
---|---|---|
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! |
||
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group