最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

柏林噪聲簡(jiǎn)化版地形生成算法js版代碼

2023-04-25 11:39 作者:阿-岳同學(xué)  | 我要投稿

不依賴(lài)任何其他模塊的js代碼,方便隨時(shí)取用,直接復(fù)制到項(xiàng)目非常方便:



介紹

柏林噪聲是一種能夠生成連續(xù)、無(wú)縫的隨機(jī)分布的算法。它由 Ken Perlin 在 1983 年創(chuàng)建,常用于生成自然風(fēng)景、云彩、水波等圖像。在《我的世界》游戲中,柏林噪聲算法被用于生成游戲世界中的地形。具體來(lái)說(shuō),每個(gè)游戲世界都是由一個(gè)大方塊網(wǎng)格 組成的,每個(gè)小方塊都有一個(gè)高度值。柏林噪聲算法可以根據(jù)小方塊的位置坐標(biāo)來(lái)生成 一個(gè)對(duì)應(yīng)的高度值,以此來(lái)生成具有自然形態(tài)的山丘、河流、峽谷等地形特征。這種 生成方式使得每個(gè)游戲世界都具有隨機(jī)性和獨(dú)特性,讓玩家感受到更加真實(shí)的游戲體驗(yàn)。

傳入不同的參數(shù),將高頻的噪聲和低頻的噪聲疊加在一起形成豐富的地形,遍歷棋 盤(pán)上的每一個(gè)位置對(duì)應(yīng)的疊加后的噪音網(wǎng)絡(luò)中的噪音值,即可獲得整個(gè)地形。


側(cè)視圖示意圖


俯視圖示意圖

將低于綠色平面的部分表示草地,將高于綠色的部分表示為石頭。以此可以用js來(lái)做一些小東西、小游戲。

利用這個(gè)地形算法作出的小游戲的效果


具體代碼細(xì)節(jié)


在這個(gè)代碼中,外層函數(shù) createRandom(seed) 返回了一個(gè)內(nèi)層函數(shù)。每次調(diào)用這個(gè) 內(nèi)層函數(shù),它都會(huì)修改外層函數(shù)中的變量 value。這個(gè) value 變量可以被認(rèn)為是一個(gè)狀 態(tài),記錄了當(dāng)前的隨機(jī)數(shù)生成器所處的狀態(tài)。 由于 JavaScript 的函數(shù)都是對(duì)象,當(dāng)內(nèi)層函數(shù)被返回后,外層函數(shù)的執(zhí)行環(huán)境就會(huì) 被銷(xiāo)毀,但是它的局部變量 value 會(huì)一直存在于內(nèi)層函數(shù)的閉包中,因此不會(huì)被垃圾回 收。 這個(gè) value 變量的作用就是存儲(chǔ)隨機(jī)數(shù)生成器的狀態(tài),從而可以保證在每次調(diào)用內(nèi) 層函數(shù)時(shí),返回的隨機(jī)數(shù)都是按照確定的算法生成的。 為了在編寫(xiě)代碼時(shí)區(qū)分各個(gè)噪音網(wǎng)絡(luò)的種子,要使得種子參數(shù)可以使字符串,這就需要實(shí)現(xiàn)以下將字符串哈希化的方法:


此方法使用了基本的數(shù)學(xué)運(yùn)算來(lái)實(shí)現(xiàn)哈希函數(shù),該函數(shù)將字符串 str 中每個(gè)字符的 ASCII 碼值相加,再乘以一個(gè)質(zhì)數(shù) 31,最后對(duì)一個(gè)質(zhì)數(shù)取余數(shù),得到哈希值。 雖然可以實(shí)現(xiàn)字符串轉(zhuǎn)哈希值的功能,但哈希沖突的情況比較多,對(duì)于需要高效處 理大量數(shù)據(jù)的場(chǎng)景,使用一些成熟的哈希函數(shù)庫(kù)更加合適,由于此模式的地圖相對(duì)較小, 只有 19x19,所以采用了相對(duì)簡(jiǎn)單的方式實(shí)現(xiàn)。 在此函數(shù)中使用了哈希算法中的常見(jiàn)技巧——乘法哈希法,即將當(dāng)前哈希值乘上一 個(gè)常數(shù)后加上新加入的字符,這個(gè)常數(shù)被稱(chēng)為“乘數(shù)”,一般取一個(gè)質(zhì)數(shù),乘數(shù)的選取 影響哈希算法的性能。 在這里,31 是一個(gè)較為常見(jiàn)的乘數(shù),因?yàn)樗且粋€(gè)奇素?cái)?shù),而且 hash * 31 可以 被優(yōu)化為位運(yùn)算 hash << 5 - hash,這樣可以提高計(jì)算速度,同時(shí)生成的哈希值分布也比 較均勻,避免哈希沖突。



溫馨提示

以上文字說(shuō)明其實(shí)是為了湊字?jǐn)?shù),因?yàn)榇a不能算入字?jǐn)?shù),導(dǎo)致代碼不能發(fā)表,這些文字由chatGPT根據(jù)代碼來(lái)生成。

由于up把建模軟件maya給卸載了,本文的前兩張示意圖由up“在下葉涼陳”幫忙繪制。




柏林噪聲簡(jiǎn)化版地形生成算法js版代碼的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
秦安县| 哈尔滨市| 白朗县| 鲁山县| 扶沟县| 当雄县| 江油市| 萨嘎县| 柞水县| 玉门市| 长阳| 平凉市| 余干县| 大余县| 南昌市| 淳安县| 喀喇沁旗| 彭山县| 饶平县| 兖州市| 浙江省| 集安市| 门头沟区| 蒙自县| 弋阳县| 灵武市| 凤山县| 山丹县| 灯塔市| 曲麻莱县| 阳江市| 兴和县| 雅安市| 东宁县| 桐梓县| 集安市| 富阳市| 龙游县| 威信县| 肥城市| 梓潼县|