gpt4 book ai didi

algorithm - 检测 180 度旋转时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:14 25 4
gpt4 key购买 nike

我有一个算法可以计算物体旋转的量。

它计算-180 到 180 度之间的顺时针和逆时针。然而,当旋转大约 180 度时,由于舍入,它最终会在比较形状的不同部分时检测到 -180 度和 180 度旋转的混合,这取决于舍入的发生方式,这会使实际旋转产生相当大的误差。答案是使用绝对值,但这最终会破坏旋转方向。

这是代码

 double newAngle = objOneAngle - objTwoAngle;
if (newAngle< -180)
newAngle += 360;
else if (newAngle > 180)
newAngle -= 360;

关于增强上述代码以处理 180 度旋转的最佳方法有什么想法吗?

编辑:想到的最明显的方法是拆分正值和负值,然后根据大小或其他一些指标选择最佳集合,但必须有更简单更优雅的解决方案吗?

最佳答案

测量一些旋转超过 180 度和一些旋转本身应该不是问题。我怀疑真正的问题在于您如何组合“形状的不同部分”的这些旋转。例如,如果您对旋转进行平均,那么这将产生绝对疯狂的结果。您可以采用以下三种方法。

(1) 以某种不受差异困扰的方式计算“典型旋转”图:例如,随机选择一个旋转。 (如果其中一些可能出现严重错误,您可以做更稳健的事情。)现在调整所有旋转,使“典型”旋转变为零:

for (i=0; i<nSamples; ++i) {
rotations[i] -= typicalRotation;
if (rotations[i]<-180) rotations[i] += 360;
else if (rotations[i]>180) rotations[i] -= 360;
}

现在平均这些(或者用它们做任何你正在做的事情),然后通过反向做同样的操作来纠正。

(2) 和(1)一样,但是要么直接使用旋转,要么在处理前后都调整180度。例如,通过计算 -90 到 +90 之间的旋转次数并查看它们是多于还是少于所有旋转数的一半来选择要执行的操作。

(3) 对于每个角度计算 (cos theta, sin theta) 和平均那些,而不是平均旋转角度。然后使用 atan2 将平均值转换回角度。 (想法是角度是圆上“真正”的点,因此最好使用这些点而不是角度。当您这样做时,-180 度和 +180 度之间的歧义就会消失。)

如果你做的真的是平均,我最喜欢的是 3。你的里程数可能会有所不同。

关于algorithm - 检测 180 度旋转时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com