C#/Unity - 如何只获取不同的值(带阈值)和特定的计数?

我有以下问题:

我有一个我在 Unity 中跟踪的对象的 Vector3 位置列表(例如,一个飞行的动画球体)。我将每一帧的位置添加到列表中。这导致例如 500 个值的总和。当它的动画停止时,我想“清理”记录的轨道,只保留最不同的值(以正确的顺序)。但是 List.Count 必须是 100。所以它必须检查具有阈值的“相等”值。

到目前为止我所做的:我在每一帧中将“trackableObject”的位置记录为 Vector3 并直接清理它(只保留比 'cleaningDiffTolerance' 更远的值和/或具有比 'cleaningAngleMaxDiff' 更大的角度差的值)。这样,我只能获得方向/距离显着变化的值,并在曲线/拐角处获得更多点。

我想要的:不是每帧都进行清洁,而是在我停止录制后进行。然后我只想以正确的顺序保留最不同的值,并且恰好保持 100 个值。


萧十郎
浏览 124回答 1
1回答

慕侠2389804

这取决于您的结果需要多精确(以及您如何定义“精确”)。第一个问题是:这 100 个值必须是第一个列表中的确切位置值,或者如果它在附近是否可以。位置值不会在每一帧发生太大变化。解决问题的一种简单方法是平均每一步:计算必须将多少个值组合在一起:n = totalValues/100取第一个n值并将平均值存储在最终列表中对下一个值执行相同的n操作,依此类推或者,如果您需要精确值,例如,将步骤 2 替换为“获取 groupe 的第一个值”。如果移动平稳,这种方法将足够精确。这样做的问题是,如果你有一个突然的位置变化(比如一个角度而不是一个平滑的转弯),你可能不会得到这个角度发生的确切位置。识别这些的唯一解决方案是进行一些更高级的分析。例如,您可以在谷歌上搜索“高通滤波器”。我建议先尝试简单的方法,看看它是否适合您的需求
打开App,查看更多内容
随时随地看视频慕课网APP