Hi,
erst mal war ich mir bei der Wahl der Rubrik nicht ganz sicher. Sorry also, wenn ich den Thread in die falsche Rubrik gepostet hab.
Ich bin heute bei meinem Projekt an eine Stelle gekommen, bei der ich prüfen muss, ob sich ein Punkt innerhalb eines bestimmten Bereiches befindet, wobei ich hier nur zweidimensional arbeite. Dieser Bereich wird durch zwei Vektoren festgelegt, die unabhängig voneinander sind.
Normalerweise würde man diese Prüfung ja etwa so schreiben:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
//Die Variablen vPoint, vRectBegin, vRectEnd sind Instanzen einer normalen Vektor-Klasse
if (vPoint.x >= vRectBegin.x && vPoint.x <= vRectEnd.x && vPoint.y >= vRectBegin.y && vPoint.y <= vRectEnd.y)
{
//Punkt ist innen
}
|
Mein Problem ist aber, dass der Vektor vRectEnd auch kleinere Werte, als vRectBegin haben kann. Wenn das der Fall ist, funktioniert die obere Abfrage aber nicht mehr. Mir ist bisher nur eine Lösung eingefallen, die aber mehr als umständlich ist.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Vector *pvLeft = &vRectBegin, *pvRight = &vRectEnd, *pvTop = &vRectBegin, *pvBottom = &vRectEnd;
if (vRectBegin.x > vRectEnd.x)
{
pvLeft = &vRectEnd;
pvRight = &vRectBegin;
}
if (vRectBegin.y > vRectEnd.y)
{
pvTop = &vRectEnd;
pvBottom = &vRectBegin;
}
if (vPoint.x >= pvLeft->x && vPoint.x <= pvRight->x && vPoint.y >= pvTop->y && vPoint.y <= pvBottom->y)
{
//Punkt ist innen
}
|
Ich weiß, man könnte beim zweiten Code auf Zeiger verzichten und stattdessen für jede Kante jeweils ein float nutzen. Aber würde das eigentliche Problem auch nicht lösen. Ich hab auch schon fleißig Google genutzt und es mit mathematischen Raten versucht, vergeblich natürlich
Kann mir da jemand helfen?