Suche Idee für Algorithmus zur Abstandsbestimmung
-
Hallo, ich muss den Abstand zweier Punkte ermitteln. Die Schwierigkeit dabei ist, dass die Punkte wie folgt angeordnet sind:
Es gibt 100 Felder. Diese sind quadratisch (also 10x10) angeordnet. In jedem dieser 100 Felder gibt es 25 Unterfelder (5x5).
Der Zugriff auf die Punkte erfolgt so:
51,4 zu 68,11. Das heißt vom 4. Unterfeld des 51. Feldes zum 11. Unterfeld des 68. Feldes... [50][51][52][53][54][55][56][57][58][59] [60][61][62][63][64][65][66][67][68][69] [70][71][72][73][74][75][76][77][78][79] .. zB. 51. Feld: [ 1][ 2][ 3][ 4][ 5] [ 6][ 7][ 8][ 9][10] [11][12][13][14][15] [16][17][18][19][20] [21][22][23][24][25]Leider will ich nicht so recht auf einen Ansatz kommen.
Hat jemand eine Idee wie man sowas als Algorithmus formulieren könnte?Meine einzige Idee wäre es, das ganze als ein Koordinatensystem zu behandeln (also 2500 Felder, 50x50). Allderdings weis ich nicht, wie ich dann die einzelnen Koordinaten umwandeln müsste.
Bin über jede Anregung dankbar

-
Mathc schrieb:
Allderdings weis ich nicht, wie ich dann die einzelnen Koordinaten umwandeln müsste
Simples Rechnen.
Angenommen deine X-Koordinate geht (bezogen auf dein Bild) von links nach rechts und die Y-Koordinate von oben nach unten.
Dann läge
68,11
X: 8 * 10 + 1
Y: 6 * 10 + 1oder ausführlicher
für die X-Koordinate willst du die letzt Ziffer von der 68 (also die
und die letzt Ziffer von der 11
X: 68 mod 10 + 11 mod 10für die Y-Koordinate willst du die erste Ziffer von der 68 und die erste Ziffer von der 11
Y: 68 / 10 + 11 / 10
(integer-Division, d.h. die Zahlen nach dem Komma fallen einfach weg)... nur so als Anregung
-
-
Meine Rechnung stimmt hinten und vorne nicht.
War aber auch nur als Anregung gedacht ...

-
Ich schreibe es besser richtig hin, falls mein Fehler von vorhin doch zu sehr verwirrt hat.
Wenn du auch die 25 Felder mit 0 bis 24 durchzählst, sollte das funktionieren:
z sei die Feldnummer des 100er Feldes (0..99)
f die des 25er Feldes (0..24)X-Koordinate: (z mod 10) * 5 + f mod 5
Y-Koordinate: (z / 10) * 5 + f / 5D.h.
99,24 würde die Koordinaten 49:49 bekommen
0,0 würde die Koordinaten 0:0 bekommen
0, 24 würde die Koordinaten 4:4 bekommen
1, 24 würde die Koordinate 9:4 bekommenusw.
Wenn diese Umrechnung erfolgt ist, sollte die Abstandsberechnung trivial sein.
Bleibt die Frage: Was hat das mit c++ zu tun.
-
Die Nummern im großen Feld beginnen bei 0 und die im Sub-Feld bei 1 - ein bisschen krank, aber das muss man beachten. Ich unterstelle mal, dass der Abstand zweier benachbarter Subfelder ==1 ist.
benutze 'Vector.h' und dann ..#include "Vektor.h" // http://www.c-plusplus.net/forum/viewtopic-var-p-is-1108802.html#1108802 #include <iostream> struct FeldNummer { int m_feldNr; int m_subFeldNr; friend std::istream& operator>>( std::istream& in, FeldNummer& nr ) { char komma; if( in >> nr.m_feldNr >> komma >> nr.m_subFeldNr && komma != ',' ) in.setstate( std::ios_base::failbit ); return in; } }; template< int XSize, int YSize, int Base > basic_vector< double > makePos( int nr ) { const int idx = nr - Base; return basic_vector< double >( idx % XSize, idx / YSize ); } basic_vector< double > makePos( const FeldNummer& nr ) { return makePos< 10, 10, 0 >( nr.m_feldNr ) * 5 + makePos< 5, 5, 1 >( nr.m_subFeldNr ); } int main() { using namespace std; cout << "gegen sie zwei Felder an zB.: 51,4 68,11 " << endl; for( FeldNummer von, bis; cin >> von >> bis; ) { cout << "Der Abstand betraegt: " << abs( makePos( bis ) - makePos( von ) ) << endl; } return 0; }Man erhält z.B.:
gegen sie zwei Felder an zB.: 51,4 68,11 54,4 76,13 Der Abstand betraegt: 15 x Press any key to continue . . .