为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
萧十郎 2022-06-18 16:33:16
我有以下问题:我有一个我在 Unity 中跟踪的对象的 Vector3 位置列表(例如,一个飞行的动画球体)。我将每一帧的位置添加到列表中。这导致例如 500 个值的总和。当它的动画停止时,我想“清理”记录的轨道,只保留最不同的值(以正确的顺序)。但是 List.Count 必须是 100。所以它必须检查具有阈值的“相等”值。到目前为止我所做的:我在每一帧中将“trackableObject”的位置记录为 Vector3 并直接清理它(只保留比 'cleaningDiffTolerance' 更远的值和/或具有比 'cleaningAngleMaxDiff' 更大的角度差的值)。这样,我只能获得方向/距离显着变化的值,并在曲线/拐角处获得更多点。我想要的:不是每帧都进行清洁,而是在我停止录制后进行。然后我只想以正确的顺序保留最不同的值,并且恰好保持 100 个值。
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

这取决于您的结果需要多精确(以及您如何定义“精确”)。第一个问题是:

这 100 个值必须是第一个列表中的确切位置值,或者如果它在附近是否可以。

位置值不会在每一帧发生太大变化。解决问题的一种简单方法是平均每一步:

  1. 计算必须将多少个值组合在一起:n = totalValues/100

  2. 取第一个n值并将平均值存储在最终列表中

  3. 对下一个值执行相同的n操作,依此类推

或者,如果您需要精确值,例如,将步骤 2 替换为“获取 groupe 的第一个值”。

如果移动平稳,这种方法将足够精确。这样做的问题是,如果你有一个突然的位置变化(比如一个角度而不是一个平滑的转弯),你可能不会得到这个角度发生的确切位置。识别这些的唯一解决方案是进行一些更高级的分析。例如,您可以在谷歌上搜索“高通滤波器”。

我建议先尝试简单的方法,看看它是否适合您的需求


查看完整回答
反对 回复 2022-06-18
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信