用 Triton 模拟特定海况
如果你将Triton用于培训和模拟目的,你会想使用它更先进的物理模拟能力。
有几种方法可以用Triton指定海洋条件。
首先要了解的是局部风浪和海浪之间的区别。风浪是由局部风况产生的,由覆盖观测者的WindFetch对象定义。海浪通常是波长较长的海浪,可能来自于不影响附近地区的远方风暴。你可能想单独指定这些类型的海浪,Triton让你这样做。
另一个重要的概念是 "风向长度"。这是风在到达观察者之前所走过的距离。当风吹过海洋表面时,风浪会随着时间的推移而增加,所以风向长度越长,风浪越大。
选择一个波谱模型
在Triton::Ocean::Create()方法中,你有几种波谱模型的选择。简单地说--如果你要建立一个海事培训应用,或者如果你用Triton为浮力模型提供动力,而船舶运动应该是真实的,那么就使用JONSWAP。JONSWAP(联合北海波浪观测项目)能够使用潮汐长度作为其模拟的一部分,如果没有指定潮汐长度,它将自动退回到PIERSON_MOSKOWITZ模型。JONSWAP只是通过模拟水草长度的非线性效应来扩展PIERSON_MOSKOWITZ,但这些效应可能很重要。
TESSENDORF、PIERSON_MOSKOWITZ和JONSWAP模型都使用反快速傅里叶变换来驱动它们的波浪模拟,所以它们在运行时具有相同的性能特征。然而,它们在设置FFT时有不同的计算成本,每当模拟的风向或海浪条件发生变化时,就会出现这种情况。如果你预计每一帧都会改变风向和/或风速,你可以选择使用TESSENDORF来获得最佳性能,尽管这要以一些物理精度为代价(Tessendorf使用简化的菲利普斯频谱,计算速度非常快)。PIERSON_MOSKOWITZ比TESSENDORF慢,而JONSWAP是三者中最慢的。但同样,这只在你每一帧都要改变模拟条件的情况下才重要。
指定风向长度
为了充分利用JONSWAP模型,你必须指定风的长度作为模拟的一部分。这是从你通过Triton::Environment::AddWindFetch()传递给Triton的WindFetch对象推断出来的。
如果你在一个风场上调用Triton::WindFetch::SetLocalization(),Triton可以根据风场的边界体积和观测者的位置推断出风场长度。风流的中心代表风的原点,而风流长度是观察者到这个原点的距离。如果观测者在WindFetch的边界之外,它的风就不会被使用。
你也可以用Triton::WindFetch::SetFetchLength()指定一个明确的、恒定的取风长度。如果设置了,它将取代使用SetLocalization()中定义的边界来计算取值长度。然而,如果SetLocalization()被调用到WindFetch上,它的边界将被用来确定WindFetch是否会影响观察者。
重要的是,如果你要指定它们的话,要使用实际的取样长度。通常情况下,这些长度在 100 公里左右。汇流长度在整个海浪高度中起着非常重要的作用,所以设置得太小可能会导致海浪不自然地变小。设置得太高可能会产生不自然的大浪。如果你没有真实的取水长度数据,你最好不要指定它,而是使用PIERSON_MOSKOWITZ模型。
模拟海浪
Triton可以模拟来自远方风暴的海浪,而不是本地风浪。参见Triton::Environment::AddSwell()和Triton::Environment::ClearSwells()方法。这些方法可以让你精确控制加入到本地风浪中的膨胀波的高度、波长和方向。典型的海浪高度是3米左右,典型的海浪波长是100米左右--请确保你指定的数值是现实的,以防止出现异常。尽管你可以为你的海浪指定一个与当地风向不同的方向,但这可能看起来不自然。
海浪是通过修改我们的反FFT的输入来实现的,以烘托出你所指定的海浪。因此,你可以指定你想要的海浪数量,而且它们不会有任何运行时的性能损失。
模拟特定的波弗特或道格拉斯海况
你的应用程序的用户可能希望模拟特定的 "海况",而Triton使之尽可能简单。
Triton::Environment::SimulateSeaState()方法将产生与Beaufort尺度给出的状态一致的局部风浪。关于每个值所描述的条件,见http://en.wikipedia.org/wiki/Beaufort_scale。
| 程度 | 描述 | 波高(米) |
| 0 | 平静 | 0 |
| 1 | 轻微空气 | 0-0.2 |
| 2 | 轻微的微风 | 0.2-0.5 |
| 3 | 温和的微风 | 0.5-1 |
| 4 | 中等微风 | 1-2 |
| 5 | 清爽的微风 | 2-3 |
| 6 | 强劲的微风 | 3-4 |
| 7 | 大风 | 4-5.5 |
| 8 | 中等大风 | 5.5-7.5 |
| 9 | 强烈大风 | 7-10 |
| 10 | 暴风雨 | 9-12.5 |
| 11 | 猛烈风暴 | 11.5-16 |
| 12 | 飓风 | 14以上 |
除了模拟的海况外,你的用户可能还想加入特定的海浪情况。只要使用Triton::Environment::AddSwell()来添加你想要的特定海浪,并记得在重新创建海浪条件之前使用Triton::Environment::ClearSwells()。
道格拉斯海平面图( http://en.wikipedia.org/wiki/Douglas_Sea_Scale )独立地指定了当地的风浪和海浪,所以它一次指定了两种条件。Triton::Environment::SetDouglasSeaScale() 方法可以用来模拟这些条件。道格拉斯海标指定了一个特殊的 "混乱 "海浪状态(#9,),Triton将其解释为从模拟的海浪中去除所有方向性。
| 程度 | 风浪 | 涌浪 |
| 0 | 平静(玻璃状)(0-.1米) | 无波浪 |
| 1 | 平静(波纹)(.1-.5米) | 非常低(短而低) |
| 2 | 平稳 (.1-.5米) | 低 (长而低) |
| 3 | 轻微 (.5-1.25m) | 轻微 (短而中等) |
| 4 | 中等 (1.25-2.5米) | 中等 (平均和中等) |
| 5 | 粗糙 (2.5-5米) | 中等粗糙 (长和中等) |
| 6 | 非常粗糙 (4-6米) | 粗糙 (短而重) |
| 7 | 高(6-9米) | 高(平均和重) |
| 8 | 非常高(9-14米) | 非常高(长而重) |
| 9 | 偏高(14米以上) | 混乱(无法定义) |
渝公网安备50010702505508