以下公式的实施是否正确?我很难在java中实现某些公式:
Formula (Original)
Y(x,y,t)=A*cos(w *(x,y)+ wt*t + FI;
Formula (Java)
float yPos = (float) (A* Math.cos((w * (y) + w * (x)) + wt* t+ FI));
yPos是网格上矢量的y(向上)位置。由于原始公式似乎返回一个向量,我只是将其应用于y。
我创建了一个包含顶点的三维网格。使用嵌套for循环在更新循环中更改每个顶点位置:
for (int y = 0; y < sizeY; y++) {
for (int x = 0; x < sizeX; x++) {
float xPos = x;
float yPos = 0;
float zPos = y;
yPos += sineY(x, y, time); // Cant be consistant Waves
waterVertexPos.set(xPos, yPos, zPos); //y is where z is
vertBufArray[index++] = waterVertexPos.getX();
vertBufArray[index++] = waterVertexPos.getY();
vertBufArray[index++] = waterVertexPos.getZ();
}
}
for循环使用上面的公式更改每个顶点的yposition:
float yPos = (float) (A* Math.cos((w * (y) + w * (x)) + wt* t+ FI));
公式的信息:
这些波的幅度(A):波峰到波谷之间长度的一半;
波长(L):两个波峰之间的距离; 空间角频率(w):空间角频率的方向是相同的 波漫方向,数量为 相对于波长L:| w | = 2 * PI / L;
波浪速度:波浪在一秒钟内移动的距离;
时间角频率(wt):wt = S * 2 * PI / L;
波浪方向(D):波峰的方向。
初始阶段(FI):波浪的起始阶段;
编辑:
使用此公式给出了以下结果:
来源:
http://lnu.diva-portal.org/smash/get/diva2:205412/FULLTEXT01
答案 0 :(得分:1)
w
是一个向量,因此您需要两个数字wx
和wy
:
float yPos = A*Math.cos(wx*x + wy*y + wt*t+ FI);
否则,一切都应该没问题,只要确保在遇到这些时将所有向量/矩阵表达式扩展为算术运算。