| |
VuencBirr Member
Anmeldedatum: 28.03.2012 Beiträge: 41
|
Verfasst am: 12.04.2012, 21:40 Titel: Komische Ergebnisse bei RectangleF.Contains(PointF) |
|
Bei mir kam es bei einer Kollisionsprüfung zu Fehlern, dann hab ich im Debugger mal nachgeprüft und bin zu komischen Ergebnissen gekommen:
using System.Drawing;
new RectangleF(-4, -4, 1204, 1004).Contains(new PointF(1200, 0)) => Ergebnis: false
new RectangleF(-4, -4, 1204, 1004).Contains(new PointF(1200, 1)) => Ergebnis: false
new RectangleF(-4, -4, 1205, 1004).Contains(new PointF(1200, 0)) => Ergebnis: true
new RectangleF(-4, -4, 1205, 1004).Contains(new PointF(1199, 0)) => Ergebnis: true
So wie es für mich aussieht, liegt der PointF eigentlich immer innerhalb des RectangleFs, oder hab ich da irgendwas übersehen? Kann sich hier irgendwer diese Ergebnisse erklären? Oder ist da ein Fehler in der RectangleF-Klasse (was ich eig. nicht glaube)? |
|
| Nach oben |
|

|
Fortrackz Member
Anmeldedatum: 01.07.2011 Beiträge: 186 Wohnort: Nürtingen
|
Verfasst am: 12.04.2012, 21:48 Titel: |
|
Ich denke mal, dass wenn der Punkt genau auf der Kante liegt, das nicht mehr zählt.
new RectangleF(-4, -4, 1204, 1004).Contains(new PointF(1200, 0));
dann ginge das Rectangle ja bis X: 1200 und der Punkt liegt bei X:1200
Versuchs mal mit 1199.. Ich weiß es nicht genau, spekuliere nur |
|
| Nach oben |
|

|
JeReT Member
Anmeldedatum: 19.07.2007 Beiträge: 3248 Wohnort: µnchen
|
Verfasst am: 12.04.2012, 21:49 Titel: |
|
jup. Auf dem Rand liegend bedeutet nicht darin liegend. so einfach ist das  _________________
Shapes |
|
| Nach oben |
|

|
VuencBirr Member
Anmeldedatum: 28.03.2012 Beiträge: 41
|
Verfasst am: 12.04.2012, 22:04 Titel: |
|
| Hä das ist doch grade das komische es geht ja nicht bis 1200 sondern 1204! Sonst wär die Lösung ja klar |
|
| Nach oben |
|

|
cheater Member
Anmeldedatum: 05.06.2011 Beiträge: 612 Wohnort: Nähe Graz
|
Verfasst am: 12.04.2012, 22:18 Titel: |
|
ja, du hast was übersehen: Und zwar die bedeutung der Parameter des Konstruktors des RectanlgeF.
Diese sin: X Position, Y Position, Breite und höhe
Wenn dein Rectangle bei -4 beginnt und 1204 breit ist, hört es bei 1200 auf. Deshalb wird der Punkt 1200 nicht mehr in dem Rechteck befinden. _________________ Ich übernehme keinerlei Haftung für falsche, unnütze oder störende Beiträge... |
|
| Nach oben |
|

|
Kevin Member
Anmeldedatum: 24.10.2008 Beiträge: 882 Wohnort: Karlsruhe
|
Verfasst am: 12.04.2012, 22:21 Titel: |
|
Schau dir mal die Dokumentation zum Konstruktor der RectangleF Klasse an, dann wirst du sehen, dass die ersten zwei Parameter die Koordinaten der oberen linken Ecke angeben und die letzten beiden die Breite bzw. die Höhe, nicht aber den unteren rechten Punkt, wie du vllt vermutest
Die Linke Obere Ecke des Rechtecks ist also in deinem Fall bei (-4/-4) und die Breite und Höhe ist 1204, deshalb ist die untere Rechte Ecke bei (1200/1200). Wie meine Vorredner schon erwähnt haben, wird ein Punkt auf der Ecke wohl als "Nicht Contained" angesehen. Ist also alles ganz logisch
//Edit: Verdammt zu langsam  _________________ Mein Youtube Kanal |
|
| Nach oben |
|

|
VuencBirr Member
Anmeldedatum: 28.03.2012 Beiträge: 41
|
Verfasst am: 13.04.2012, 14:02 Titel: |
|
Ach verdammt bin ich dumm
Danke |
|
| Nach oben |
|

|
|
|
|