Java柏林算法,柏林噪音 - 我做错了什么?
我刚刚开始世界一代,我一直在寻找perlin noise的教程,但遗憾的是谷歌上没有很多东西可以找到 . 我遵循教程的最后几天,但我无法让我的代码工作 .
这是我的Java方法 .
private static double[][] createNoise(int xn, int yn, int sps) {
int m = yn * sps;
int n = xn * sps;
double[][] u = new double[yn + 1][];
double[][] v = new double[yn + 1][];
double[][] x = new double[m][];
double[][] y = new double[m][];
double[][] z = new double[m][];
for (int i = 0; i < m; i++) {
x[i] = new double[n];
y[i] = new double[n];
z[i] = new double[n];
}
for (int i = 0; i < yn + 1; i++) {
u[i] = new double[xn + 1];
v[i] = new double[xn + 1];
}
for (int i = 0; i < xn + 1; i++) {
for (int j = 0; j < yn + 1; j++) {
u[i][j] = nextRandom();
v[i][j] = nextRandom();
}
}
double hx = xn / (n - 1);
double hy = yn / (m - 1);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
x[i][j] = hx * j;
y[i][j] = hy * i;
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
int xc = (int)x[i][j];
int yc = (int)y[i][j];
if (x[i][j] % 1 == 0 && x[i][j] != 0 ) xc = xc - 1;
if (y[i][j] % 1 == 0 && y[i][j] != 0 ) yc = yc - 1;
double xr = x[i][j] - xc;
double yr = y[i][j] - yc;
double s11[] = {-xr, -yr};
double s21[] = {-xr, 1 - yr};
double s22[] = {1 - xr, 1 - yr};
double s12[] = {1 - xr, -yr};
double q11 = s11[0] * u[yc][xc] + s11[1] * v[yc][xc];
double q21 = s21[0] * u[yc + 1][xc] + s21[1] * v[yc + 1][xc];
double q22 = s22[0] * u[yc + 1][xc + 1] + s22[1] * v[yc + 1][xc + 1];
double q12 = s12[0] * u[yc][xc + 1] + s12[1] * v[yc][xc + 1];
z[i][j] = lerp(x[i][j], y[i][j], xc, xc + 1, yc, yc + 1, q11, q12, q21, q22);
}
}
return z;
}
该方法遗留下来的高度图看起来像这样
如您所见,第一行/列正在运行,但之后算法似乎失败了 . 我确定了方法
nextRandom();
返回介于-1和1之间的浮点值 .
非常感谢!
Java柏林算法,柏林噪音 - 我做错了什么?相关推荐
- Re: 一著名软件公司的java笔试算法题!
主 题: Re: 一著名软件公司的java笔试算法题! 作 者: szlhj () 等 级: 信 誉 值: 95 所属论坛: Java J2SE / 基础类 问题点数: 20 回复 ...
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
- JVM(3):Java GC算法 垃圾收集器
概述 垃圾收集 Garbage Collection 通常被称为"GC",它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数 ...
- java序列化算法透析_Java序列化机制与原理的深入分析
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
- Java的算法讲解以及案例!
算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令. 算法的特征: 输入性:有零个或多个外部量作为算法的输入 输出性:算法产生 ...
- 如何在面试中介绍自己的项目经验,90%的人都做错了!
目录 1.如何准备项目介绍?别害怕,面试官什么都不知道 2.准备好项目细节,一旦被问倒,说明你没做过 3.不露痕迹地说出面试官爱听的话 4.主动出击,面试官没有义务挖掘你的亮点 5.低级错误可能导致直 ...
- 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法
26.Java GC算法 垃圾收集器 1.1.1标记 -清除算法 1.1.2复制算法 1.1.3标记-压缩算法 1.1.4分代收集算法 26.Java GC算法 垃圾收集器 概述 垃圾收集 Garba ...
- Java入门算法(数据结构篇)丨蓄力计划
本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...
最新文章
- three.js贴图
- 实用比较,帮你决策到底选择Vue还是Angular4、5
- 如何将HBuilder中的项目Push至Gitee中!
- mysql 横向分表合并_MySQL横向扩展-分库分表解决方案总结
- [笨木头FireFly 02]入门篇2_客户端发送请求,服务器处理请求
- Maven 手动安装Jar包的例子
- 多线程下载工具axel
- WCF中如何修改MaxItemsInObjectGraph的限制
- WebForms简介
- 【转】IDEA类和方法注释模板设置(非常详细)
- 希尔密码加解密(Python)
- Python求绝对值的三种方法
- Oracle 18c安装操作指导手册
- 【Android】使用deviceowner 配置手机设置 (Monkey自动化测试删去状态栏、设定输入法、静音、APP自动权限授予、Kiosk模式打开)
- C#【文件操作篇】PDF文件和图片互相转换
- Codeforces Round #444 (Div. 2)-贪心尺取-Ratings and Reality Shows
- 2016阿里安全工程师实习生招聘笔试题
- 数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】
- MSRA院长周礼栋升任微软全球资深副总裁,20年前加入微软,毕业于复旦
- java long初始化_java中long类型的变量想要初始化其值为空,要怎么实现?
热门文章
- Exception: com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to com.mysql.jdbc.Connection
- TCP协议的三次握手、四次挥手
- linux 挂载ISO文件以及yum源配置
- SQL Server 数据库 'xxx' 正处于转换状态。请稍后再尝试该语句。
- SecureCRT提示----数据库里没找到防火墙“无”----解决方案
- Windows操作系统启动介绍(二)
- How Many Replication Method In SAP HANA
- DNS中实现父子域,以及授权和转发
- Winsows VISTA启动过程解析
- MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器