Vulpecula
Commander
- Registriert
- Nov. 2007
- Beiträge
- 2.249
Moin moin!
Ich hab mich mal im Netz auf die Suche gemacht, um Code zu finden, der mir den Umlaufsinn eines Dreiecks bestimmen kann.
Dabei bin ich über folgendes gestolpert:
Allerdings bin ich ein wenig skeptisch... Was hier gerechnet wird bzw. werden soll ist zwar verständlich (auch wenn der Code etwas aussagekräftiger sein könnte...), aber mich wundert die FOR-Schleife.
Mal angenommen ich möchte mit der Funktion ein einzelnes Dreieck überprüfen. Dann übergebe ich die Parameter "3" (ein Dreieck hat ja nur drei Vertices) und eine Liste (bzw. ein Array, whatever...) mit den drei Vertices. Die Liste sollte doch von 0 bis 2 laufen, aber beim letzten Durchlauf der Schleife wird aus "i+1" doch eine 3 und das Programm würde mit einem Fehler aussteigen, oder habe ich was verpasst?
MfG - Vulpecula
Ich hab mich mal im Netz auf die Suche gemacht, um Code zu finden, der mir den Umlaufsinn eines Dreiecks bestimmen kann.
Dabei bin ich über folgendes gestolpert:
Code:
#define COUNTER_CLOCKWISE 0
#define CLOCKWISE 1
/*
* Return either clockwise or counter_clockwise for the orientation of the polygon.
*/
int orientation(n,v)
int n; /* Number of vertices */
vertex v[]; /* The vertex list */
{
float area;
int i;
/* Do the wrap-around first */
area = v[n-1].x * v[0].y - v[0].x * v[n-1].y;
/* Compute the area (times 2) of the polygon */
for (i = 0; i < n-1; i++)
area += v[i].x * v[i+1].y - v[i+1].x * v[i].y;
if (area >= 0.0)
return COUNTER_CLOCKWISE;
else
return CLOCKWISE;
}
/* End of orientation */
Allerdings bin ich ein wenig skeptisch... Was hier gerechnet wird bzw. werden soll ist zwar verständlich (auch wenn der Code etwas aussagekräftiger sein könnte...), aber mich wundert die FOR-Schleife.
Mal angenommen ich möchte mit der Funktion ein einzelnes Dreieck überprüfen. Dann übergebe ich die Parameter "3" (ein Dreieck hat ja nur drei Vertices) und eine Liste (bzw. ein Array, whatever...) mit den drei Vertices. Die Liste sollte doch von 0 bis 2 laufen, aber beim letzten Durchlauf der Schleife wird aus "i+1" doch eine 3 und das Programm würde mit einem Fehler aussteigen, oder habe ich was verpasst?
MfG - Vulpecula