【发布时间】:2011-05-21 04:57:05
【问题描述】:
我正在制作一些 3D 图形,并且我有一片开阔的海洋。对于这个海洋,我有一个矩阵,表示特定矩形海域的海况(即波高)。海洋的其余部分是平坦的。我的问题是,我的受控海(有波浪)位于开阔平坦的大海中间,网格边缘的不连续性会导致一些不良伪影。我只为一小部分而不是整个海洋产生波浪的原因是因为我的噪声函数在整个海洋上计算起来非常昂贵(而且我知道最简单的解决方案是使用更便宜的噪声函数,比如单纯形噪声,但这不是一个选项)。
话虽如此,我的问题确实很简单。如果说我有一个大小为 100x40 的网格(又名矩阵又名 2d 数组),并且我想找到位置 120x33 的值,我只想取最近的邻居,即 100x33。因此,对于位于给定范围之外的任何数字,我希望该数字饱和以位于给定范围内。 C 或 C++ 中是否有执行此操作的函数?
编辑:位置参数是浮点类型
我知道我可以用一些简单的 if 语句来做到这一点,但它似乎是标准库会包含的东西。
【问题讨论】:
-
有SSE指令支持饱和。
-
这是否需要在汇编中编码?我也可以指定范围还是仅饱和到原始数据类型的范围?
-
我认为任何现代机器都应该能够毫无问题地完成整个海洋。我的软件 (orcina.com/SoftwareProducts/OrcaFlex) 这样做了,尽管它在本质上有所不同,因为它试图真实地模拟物理场。
-
@david:他们可以而且他们确实可以,但是我从一些 MATLAB 代码通过网络获取我的海洋频谱,这些 ATM 没有编译,因此运行速度比原生 C 慢 100 倍,并且在 MATLAB 中,这对于整个海洋来说更难实时完成。如果您对如何在 MATLAB 中使用 38 个叠加的 sin 函数对具有约 1k 数据点的网格实时快速(200Hz)有任何想法,我很想听听。
-
@codenoob 最明显的技巧是仅评估 t0 处的三角函数,然后对 t1、t2 等使用加法公式。这样你只需要 FP 乘法/加法而不用触发。