2D Array auf andere 2D Arrays verteilen
-
Probiers mal so (ungetestet):
void FuelleBereich(int x, int y) { for(int i = 0; i < 16; i++) memcpy(HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16); } void VerteileAlles() { for(int y = 0; y < 16; y++) for(int x = 0; x < 16; x++) FuelleBereich(x, y); }
-
Hi,
ich hab mal was gecodet, doch das funzt leider nicht (Es kommt kein Text bei der Textausgabenschleife :()
#include <iostream> #include <windows.h> using namespace std; char g_Array [4][2]; class Klasse { public: char eintraege [2][2]; }; Klasse Heightmap[2]; int main (int argc, char* argv[]) { g_Array [0][1] = 'a'; g_Array [0][2] = 'b'; g_Array [1][1] = 'c'; g_Array [1][2] = 'd'; g_Array [2][1] = 'e'; g_Array [2][2] = 'f'; g_Array [3][1] = 'g'; g_Array [3][2] = 'h'; for (int HeightmapEintrag=0; HeightmapEintrag>2; HeightmapEintrag++) { for (int KlassenEintragX=0; KlassenEintragX>2; KlassenEintragX++) { for (int KlassenEintragY=0; KlassenEintragY>2; KlassenEintragX++) { Heightmap[HeightmapEintrag].eintraege[KlassenEintragX][KlassenEintragY] = g_Array [KlassenEintragX+HeightmapEintrag][KlassenEintragY+HeightmapEintrag]; } } } for (int HeightmapEintrag=0; HeightmapEintrag>2; HeightmapEintrag++) { for (int KlassenEintragX=0; KlassenEintragX>2; KlassenEintragX++) { for (int KlassenEintragY=0; KlassenEintragY>2; KlassenEintragX++) { } } } system ("pause"); // Ja ich weis kein Standard aber zum Testen return 0; }
woran kann das liegen? Also es wird kein einziger char ausgegeben
-
shit sorry, falscher code:
#include <iostream> #include <windows.h> using namespace std; char g_Array [4][2]; class Klasse { public: char eintraege [2][2]; }; Klasse Heightmap[2]; int main (int argc, char* argv[]) { g_Array [0][1] = 'a'; g_Array [0][2] = 'b'; g_Array [1][1] = 'c'; g_Array [1][2] = 'd'; g_Array [2][1] = 'e'; g_Array [2][2] = 'f'; g_Array [3][1] = 'g'; g_Array [3][2] = 'h'; for (int HeightmapEintrag=0; HeightmapEintrag>2; HeightmapEintrag++) { for (int KlassenEintragX=0; KlassenEintragX>2; KlassenEintragX++) { for (int KlassenEintragY=0; KlassenEintragY>2; KlassenEintragX++) { Heightmap[HeightmapEintrag].eintraege[KlassenEintragX][KlassenEintragY] = g_Array [KlassenEintragX+HeightmapEintrag][KlassenEintragY+HeightmapEintrag]; } } } for (int HeightmapEintrag=0; HeightmapEintrag>2; HeightmapEintrag++) { for (int KlassenEintragX=0; KlassenEintragX>2; KlassenEintragX++) { for (int KlassenEintragY=0; KlassenEintragY>2; KlassenEintragX++) { cout << Heightmap[HeightmapEintrag].eintraege[KlassenEintragX][KlassenEintragY] << endl; } } } system ("pause"); return 0; }
-
Hast du meine VerteileAlles()-Funktion ausprobiert?
-
ja funzt aber net
-
Es ist zwar kein C++ Design, aber bei mir klappt folgender Code:
unsigned char HeightMap[256][256]; struct { unsigned char HeightMapPage[16][16]; } TerrainPages[16][16]; void FuelleBereich(int x, int y) { for(int i = 0; i < 16; i++) memcpy(TerrainPages[y][x].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16); } void VerteileAlles() { for(int y = 0; y < 16; y++) for(int x = 0; x < 16; x++) FuelleBereich(x, y); }
-
hmmm TerrainPages soll aber ein 1D array sein und kein 2D, wie ändere ich das nun am besten?
-
Rechne besser noch mal nach.
HeightMap hat 256256 -> 65536 Bytes.
TerrainPages hat bei mir 16*16*1616 -> 65536 Bytes.Wenn du TerrainPages 1-Dimensional haben willst, musst du 256 und nicht 16 Elemente verwenden.
Dann musst du in meinem Code noch eine einzige Zeile anpassen. Welche und wie, darauf kommst du bestimmt.
-
Hi,
bestimmt die hier:
memcpy(TerrainPages[y][x].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16); // durch memcpy(TerrainPages[y].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16);
und halt beim Globalen Array die 2. Dimension entfernen, nur das funzt net der zeigt nix an
-
Hier mal der ganze code:
#include <iostream> #include <windows.h> using namespace std; /* char g_Array [4][2]; class Klasse { public: char eintraege [2][2]; }; Klasse Heightmap[2]; */ unsigned char HeightMap[256][256]; struct { unsigned char HeightMapPage[16][16]; } TerrainPages[16]; void FuelleBereich(int x, int y) { for(int i = 0; i < 16; i++) memcpy(TerrainPages[y].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16); } void VerteileAlles() { for(int y = 0; y < 16; y++) for(int x = 0; x < 16; x++) FuelleBereich(x, y); } int main (int argc, char* argv[]) { HeightMap [0][0] = 'a'; HeightMap [0][1] = 'b'; HeightMap [1][0] = 'c'; HeightMap [1][1] = 'd'; HeightMap [2][0] = 'e'; HeightMap [2][1] = 'f'; HeightMap [3][0] = 'g'; HeightMap [3][1] = 'h'; /* g_Array [0][1] = 'a'; g_Array [0][2] = 'b'; g_Array [1][1] = 'c'; g_Array [1][2] = 'd'; g_Array [2][1] = 'e'; g_Array [2][2] = 'f'; g_Array [3][1] = 'g'; g_Array [3][2] = 'h'; for (int HeightmapEintrag=0; HeightmapEintrag>2; HeightmapEintrag++) { for (int KlassenEintragX=0; KlassenEintragX>2; KlassenEintragX++) { for (int KlassenEintragY=0; KlassenEintragY>2; KlassenEintragX++) { Heightmap[HeightmapEintrag].eintraege[KlassenEintragX][KlassenEintragY] = g_Array [KlassenEintragX+HeightmapEintrag][KlassenEintragY+HeightmapEintrag]; } } } */ cout << TerrainPages[1].HeightMapPage[1][1]; // zeigt nur ein Leerzeichen an egal bei welchem eintrag :( system ("pause"); return 0; }
-
*push*
sorry in dem code hab ich die Funktion verteileAlles nicht aufgerufen aber auch wenn ich sie aufrufe passiert nix
-
0=0 schrieb:
Hi,
bestimmt die hier:
memcpy(TerrainPages[y][x].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16); // durch memcpy(TerrainPages[y].HeightMapPage[i], HeightMap[i + y * 16] + x * 16, 16);
und halt beim Globalen Array die 2. Dimension entfernen, nur das funzt net der zeigt nix an
Bitte, versuch meinen Code zu verstehen. Das sollte echt nicht so schwer sein.
Einfach die 2. Dimension zu entfernen ist Käse.
Die 2. Dimension musst du manuell in die 1. einrechnen: TerrainPages[y * 16 + x]