簡體   English   中英

如何使用C語言創建世界地圖?

[英]How to create a world map using C language?

如何使用C語言創建世界地圖?

在這里,我要生成世界地圖的1000 * 1000二維數組。 在數組中,陸地部分標記為1,海洋部分標記為0。有沒有簡單的創建方法?

顯然,沒有算法可以描述各大洲海岸線的形狀;)

但是您可以使用例如Smrender( http://www.abenteuerland.at/smrender/ ),使用OpenStreetMap或Naturalearthdata等海岸線和一條規則為其提供數據。 讓它創建一個具有1000x1000像素的PNG圖像。

編輯:使用ImageMagick(轉換),您可以將PNG直接轉換為數組的C頭文件。 轉到Openstreetmap.org(或Googlemaps),進行縮小,直到看到整個世界,然后進行截圖,然后在您喜歡的圖像處理程序中將其打開,並將其縮放並調整為1000x1000,然后運行convert input.png output.h

伯恩哈德

幾個小時前,我在游戲開發中寫了一個答案可以幫助您,這里的主題是用javascript編寫的,但翻譯成c並不難。

在該示例中,您填充了整個0的地圖,然后隨機跟蹤了一條路徑,如果以后要平滑地圖,則可以制作一個片段,循環所有watter瓦片並將其轉換為Land(如果有3個或更多的Land Tile)與它相鄰,進行40至60次,您將獲得更平滑的海岸,並且在大陸上沒有“洞”。

編輯用C中的演示更新答案。我還沒有測試過,但是如果您包含標題並檢查代碼,這就是答案。

//Create and populate the map
int mapsize = 100;
int map[mapsize*mapsize];

for(int t = 0; t < mapsize*mapsize; t++) map[t] = 0;

//make the path
int currPos[2] = {0,50};
map[currPos[0]+(currPos[1]*mapSize)] = 1;
int landTiles = 20000;

for(var l = 0; l < landTiles; l++){
    int dir[2] = {RANDOM_BETWEEN_-1_AND_1, RANDOM_BETWEEN_-1_AND_1};
    int next[2] = {currPos[0]+dir[0], currPos[1]+dir[1]};

    map[next[0]+(next[1]*mapSize)] = 1;
    currPos = next;
}

//Draw the map
for(var row = 0; row < mapSize; row++){
    for(var col = 0; col < mapSize; col++){
        cout << map[col+(row*mapSize)];
    }
    cout << endl;
}

您可能有一些程序或腳本(以輸入一些地球圖像的形式作為輸入),該程序或腳本會生成一個長C文件,例如

const char map[1000][1000] = {
  {'0', '1', //.... etc for the first fow
  },
  {'0', '0', '0', '1', //... etc
  }
  /// etc for other rows
}; 

有關示例,另請參見XBM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM