- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
简而言之,我正在将地形(2d 高度图)从生成的值平滑回到其原始值。
有一个仅使用生成值的 6 单位平坦区域,然后是一个从生成值移回原始值的 3 单位平滑区域(总共 9 个)
在平坦区域中,所有 x、z 值都被分配了一个 y 值,例如 4 那么 3 个平滑单元应该移回零,这意味着 3,然后 2,然后 1,这将使下一步(在如果零是我们的原始数字,则等式)回到 0。
从反复试验来看,我似乎需要分别计算角和边,因为角的最大距离是对角线,即 4.24,而边的最大距离仅为 3。我尝试了很多冗长的方法来到达我所在的位置,但它仍然无法正常工作。不用说,尽管我仍然会说,我不是数学奇才。
谁能比我更善于思考这个问题?
Vector3 pos = holeCenter - terrain.transform.position;
//flatten area
int posX = Mathf.FloorToInt(pos.x * (td.heightmapResolution / td.size.x));
int posZ = Mathf.FloorToInt(pos.z * (td.heightmapResolution / td.size.z));
float[,] heightMap = td.GetHeights(0, 0, td.heightmapResolution, td.heightmapResolution);
float height = heightMap[posZ, posX];
int modZone = 9;
int flatZone = 6;
for (int x = posX - modZone; x <= posX + modZone; x++) {
for (int z = posZ - modZone; z <= posZ + modZone; z++) {
//if within 6 of cave ent (flat zone)
if (x >= posX - flatZone && x <= posX + flatZone && z >= posZ - flatZone && z <= posZ + flatZone) {
heightMap[z, x] = height + Random.Range(-0.00015f, 0.00015f);
}
//otherwise apply gently to the three rings around the flat area
else {
//if on a corner
bool corner = false;
if (x < posX - flatZone) {
if (z > posZ + flatZone) {
corner = true;
}
else if (z < posZ - flatZone) {
corner = true;
}
}
else if (x > posX + flatZone) {
if (z > posZ + flatZone) {
corner = true;
}
else if (z < posZ - flatZone) {
corner = true;
}
}
if (corner) {
//apply the new height to the old height decreasingly based on distance
float dist = Mathf.Sqrt(Mathf.Pow(Mathf.Abs(posX - x) - flatZone, 2f) +
Mathf.Pow(Mathf.Abs(posZ - z) - flatZone, 2f));
float maxDist = Mathf.Sqrt(Mathf.Pow(modZone - flatZone, 2f) * 2);
float multiplier = dist / maxDist;
heightMap[z, x] = (heightMap[z, x] * multiplier) + (height * (1 - multiplier)) + Random.Range(-0.00015f, 0.00015f);
}
else { //for an edge, only one value is in the modZone, find which, then apply
if (x < posX - flatZone || x > posX + flatZone) {
float multiplier = (Mathf.Abs(x - posX) - flatZone) / 4f;
heightMap[x, z] = (heightMap[z, x] * multiplier) + (height * (1 - multiplier)) + Random.Range(-0.00015f, 0.00015f);
}
else {
float multiplier = (Mathf.Abs(z - posZ) - flatZone) / 4f;
heightMap[x, z] = (heightMap[z, x] * multiplier) + (height * (1 - multiplier)) + Random.Range(-0.00015f, 0.00015f);
}
}
}
}
}
td.SetHeights(0, 0, heightMap);
最佳答案
回来后我让它工作了。
int modZone = 11;
int flatZone = 7;
for (int x = posX - modZone; x <= posX + modZone; x++) {
for (int z = posZ - modZone; z <= posZ + modZone; z++) {
float dist = Mathf.Sqrt(Mathf.Pow(Mathf.Abs(x - posX), 2f) + Mathf.Pow(Mathf.Abs(z - posZ), 2f));
if (dist <= flatZone) { heightMap[z, x] = height + Random.Range(-0.00015f, 0.00015f); }
else {
float multiplier = Mathf.Clamp01((modZone - dist) / (modZone - flatZone));
heightMap[z, x] = (heightMap[z, x] * (1 - multiplier)) + ((height + Random.Range(0, 0.0003f)) * multiplier);
}
}
}
我放弃了方形方法,但效果很好,圆形方法也很好用。也可能会更好地应对更多不同的情况。
关于c# - 基于正方形内距离的 yield 递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636201/
我想逐步动画化两个十进制数之间的差异。 已找到Joss Crowcroft's solution对于效果很好的整数,我做了 example on jsfiddle .代码片段: $({numberVa
我试图弄清楚如何使用 ffmpeg drawtext 函数,该函数在视频上打印叠加层,视频文件结束时还有时间。 使用 %{pts\:hms} 从开始 (00:00:00) 开始似乎没问题从视频文件的开
本周我开始学习 Java 线程和并发;我需要一些关于我使用 Thread 而不是 Runnable 实现的下一个代码的帮助: 类别 package hilos; public class Hilo e
我有一个对象列表(发票)。这些对象有一个 qty 属性。我有一个产品返回表格,其中包含要退回的产品的数量。 提交返回行时。我用提交的行填充一个 gridview,以便在提交整个返回表格之前可以根据需要
这个问题已经有答案了: Can you have a triple minus signs in C programming? What does it mean? [duplicate] (5 个回
var a = 0; (++a)+(a++)+(++a); print(a); 这会打印 3。我假设它只执行单个增量。 var a = 0; (++a)+(a++)+(--a); 这会打印 1. 这里
我知道 C 中的计算顺序并不严格,所以表达式 --a+++a 的值是未定义的,因为不知道语句的哪一部分先运行。 但是,如果我知道在特定情况下计算顺序无关紧要怎么办?例如: 所有修改对应不同的变量(如a
if (getchar == '+') { answer = getnum1+getnum2; // if the random operation is add, it will add
我会尽量用代码来解释这个问题: double power = 5000; //picked up 5 power ups, now need to increase power by 10% per
这个问题在这里已经有了答案: Loop backwards using indices (17 个回答) 关闭5年前. 我想要一个像这样的 for 循环: for counter in range(1
像这样: decr(X, X) :- X is X-1. 我想用它来递减父规则中的数字,如果这个数字等于 0,例如,父规则返回 false。 最佳答案 Prolog 是声明性的:声明性语言的一
我正在制作一个包含三张图片的 slider 。对于此幻灯片的后退按钮,它应该从最后一张图像开始并返回到 1。下面的代码在控制台记录时从 3 减少到 2 但未命中 1,所以 3 2 3 2 3 2 ..
这实际上是我关于 javascript 的第一篇文章。想知道以下代码的性能,因为它是一个“递减 while 循环”,在 while 循环中有一个递增变量。 var i = data.d.length;
将 pg_trgm.word_similarity_threshold 设置为 0.2;降低当前 session 的阈值但不为数据库做。我需要降低支持拼写错误的阈值。 最佳答案 赞the docume
我希望能够增加和减少一个值(5),并且我想用一个函数来覆盖它(我知道如何用两个函数来实现)。不幸的是,我无法完成它,也无法找出问题所在。 这是我的代码: HTML: -
我有一堆 enum 类型,像这样: enum Color {COLOR_RED = 0, COLOR_GREEN = 1, COLOR_BLUE = 2, COLOR_NUM}; enum Direc
在我的机器上递减一个 NULL 指针仍然得到一个 NULL 指针,我想知道这是否定义明确。 char *p = NULL; --p; 最佳答案 是的,行为未定义。 --p 等同于 p = p - 1(
简而言之,我正在将地形(2d 高度图)从生成的值平滑回到其原始值。 有一个仅使用生成值的 6 单位平坦区域,然后是一个从生成值移回原始值的 3 单位平滑区域(总共 9 个) 在平坦区域中,所有 x、z
给定一个数组,其中的值要么只增加,要么只减少或先增加再减少,如何找到此类数组的最大值和最小值? 最小值只是最终值中的最小值。 但是如何找到最大值呢? 一种方法是运行时间为 O(n) 的线性方法,是否可
假设您有一个递归方法,并且您在递归调用中递增/递减一个值。为什么这会导致堆栈溢出异常,而预自增/自减不会? 例如 numberCount(currentNumber++); //Stack overf
我是一名优秀的程序员,十分优秀!