unregistered schrieb:
> Wie geht das?
Am besten geht das, wenn du dein Repertoir an Datenstrukturen noch um
Strukturen erweiterst.
Eine Zusammenfassung von 2 uint16_t (also 2 Koordinaten-Werten), nennst
du einen 'Punkt'.
1 | struct Punkt_
|
2 | {
|
3 | uint16_t x;
|
4 | uint16_t y;
|
5 | };
|
noch ein typedef dazu, um die struct ohne viel Tippaufwand verwenden zu
können
1 | typedef struct Punkt_ Punkt;
|
und du kannst ein Array von Punkten(!) erstellen
1 | Punkt coord[] = {
|
2 | { 10, 12 },
|
3 | { 8, 4 },
|
4 | { 45, 68 },
|
5 | ..
|
6 | };
|
Ein Pointer auf einen bestimmten Punkt ist dann ganz einfach ein
1 | Punkt* somePoint = &coord[5];
|
Nicht alles wird vernünftig als Array modelliert. Wenn zwischen Dingen
ein starker Zusammenhalt besteht, wie zb zwischen Vorname und Nachnahme,
oder Tag/Monat/Jahr oder Stunde/Minute/Sekunde oder .... oder eben auch
der X und Y Koordinate einer Position dann modelliert man diesen
Zusammenhalt besser als Struktur und erzeugt dann erst davon ein Array.
Das hat dann auch den Vorteil, dass man in eine Funktion zb direkt einen
Punkt reingeben kann (oder einen Pointer darauf) und somit mit
projektbezogenen Begriffen und Datentypen operiert.
1 | Punkt add( Punkt* a, Punkt* b )
|
2 | {
|
3 | Punkt result;
|
4 | result.x = a->x + b->x;
|
5 | result.y = a->y + b->y;
|
6 | }
|
7 |
|
8 | Punkt sub( Punkt* a, Punkt* b )
|
9 | {
|
10 | Punkt result;
|
11 | result.x = a->x + b->x;
|
12 | result.y = a->y + b->y;
|
13 | }
|
14 |
|
15 | double distance( Punkt* start, Punkt* end )
|
16 | {
|
17 | Punkt diff = sub( end, start );
|
18 | return sqrt( diff->x * diff->x + diff->y * diff->y );
|
19 | }
|
20 |
|
21 | void draw( Punkt* start, Punkt* end )
|
22 | {
|
23 | DrawLine( start->x, start->, end->x, end->y );
|
24 | }
|
25 |
|
26 | int main()
|
27 | {
|
28 | Punkt Diff = sub( &coord[4], &coord[8] ); // Berechne die Differenzz vom Punkt 4 zum Punkt 8
|
29 | double distance( &coord[2], &coord[1] ); // Berechne die Distanz vom Punkt 2 zum Punkt 1
|
30 |
|
31 | draw( &coord[3], &coord[4] ); // zeichne eine Linie von Punkt 3 zum Punkt 4
|
32 | }
|