我有以下问题:我有一个我在 Unity 中跟踪的对象的 Vector3 位置列表(例如,一个飞行的动画球体)。我将每一帧的位置添加到列表中。这导致例如 500 个值的总和。当它的动画停止时,我想“清理”记录的轨道,只保留最不同的值(以正确的顺序)。但是 List.Count 必须是 100。所以它必须检查具有阈值的“相等”值。到目前为止我所做的:我在每一帧中将“trackableObject”的位置记录为 Vector3 并直接清理它(只保留比 'cleaningDiffTolerance' 更远的值和/或具有比 'cleaningAngleMaxDiff' 更大的角度差的值)。这样,我只能获得方向/距离显着变化的值,并在曲线/拐角处获得更多点。我想要的:不是每帧都进行清洁,而是在我停止录制后进行。然后我只想以正确的顺序保留最不同的值,并且恰好保持 100 个值。
1 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
这取决于您的结果需要多精确(以及您如何定义“精确”)。第一个问题是:
这 100 个值必须是第一个列表中的确切位置值,或者如果它在附近是否可以。
位置值不会在每一帧发生太大变化。解决问题的一种简单方法是平均每一步:
计算必须将多少个值组合在一起:
n = totalValues/100
取第一个
n
值并将平均值存储在最终列表中对下一个值执行相同的
n
操作,依此类推
或者,如果您需要精确值,例如,将步骤 2 替换为“获取 groupe 的第一个值”。
如果移动平稳,这种方法将足够精确。这样做的问题是,如果你有一个突然的位置变化(比如一个角度而不是一个平滑的转弯),你可能不会得到这个角度发生的确切位置。识别这些的唯一解决方案是进行一些更高级的分析。例如,您可以在谷歌上搜索“高通滤波器”。
我建议先尝试简单的方法,看看它是否适合您的需求
- 1 回答
- 0 关注
- 123 浏览
添加回答
举报
0/150
提交
取消