我正在试验一种用于随机景观生成的新算法。这个方法是我的主意,所以它可能会被证明是不可能的。与此同时,我正在努力解决这件事。
public static void generate(){
for(int x = -64; x <= 64; x++){
for(int y = -64; y <= 64; y++){
double val = 2d;
for(int i = x - 4; i <= x + 4; i++){
for(int j = y - 4; j <= y + 4; j++){
double w = Math.pow(hypotenuse(x, y, i, j), 1);
val += (1 * (random(i, j) / w));
}
}
tileSet(x, y, val);
}
}
}
在我解释这段代码之前,让我先说这是一个 2D 游戏,所以高度图是瓦片类型而不是实际高度。水最低 (0),然后是沙子、草和树 (3)。为了进行测试,我在两个维度上从 -64 循环到 64。对于每个图 block ,声明一个值(以 2 或草开始)。然后我们围绕这个图 block 循环(-4 到 4 是一个任意数量,我没有能够通过修改这个值来实现显着的结果差异,但 4 似乎没问题)。现在,变量 w 代表权重。每个 (i, j) 点距离 (x, y) 越远,随机值在添加到 val 之前给出的权重越小。我已经为 w 尝试了不同的指数,并为下一行尝试了不同的乘数(在这个例子中,两种情况都是 1);较低的指数和乘数似乎会扩大最终结果,但不一定会平滑,较高的指数和乘数则相反,您会看到更多的树木更靠近水,中间的草和沙子更少。
这是方法 random()
public static double random(int x, int y){
Random random = new Random(seed * 17717171L + x * 22222223L + y * 111181111L);
return random.nextGaussian() / 2d;
}
在那些内部循环完成后,x, y 的值被设置。
这是一个运行
这里是 .5 的乘数,意思是 val += (.5 * (random(i, j)/w));
如您所见,沙子和草地变多了,树木(和水总体上)明显减少了,但仍然有很多小颠簸。因此,它不会有效地改变比例。
感谢您的宝贵时间!
最佳答案
您正在做的事情被称为 inverse distance weighting .正如文章所指出的,关键参数是权重的指数。所以在你的代码中,尝试
double w = Math.pow(hypotenuse(x, y, i, j), p);
取 p 为 0.25, 0.5, 1.0, 2.0, 等
您的算法也有细微的变化,这可能会使算法的推理更容易:不是为每个单元格生成一个随机值并添加到相邻单元格,而是首先在每个单元格角生成一个随机值,然后使用从像元中心测量的反距离加权来计算像元值。
使用此方案,对像元值有贡献的随机值都以统一的方式处理,而不是一个随机值获得权重 1 而其他随机值获得反距离加权。
您可能还对 gradient noise 感兴趣如果您还没有遇到过它。
关于java - 我怎样才能平滑我的地形生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850996/
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www