这是我的问题:
2个角度表示为0到360之间的整数(如果需要则为359) 1从0到1加倍,表示收敛速度。
我需要编写一个函数,它将角度拉近一个等于收敛速度的因子。
例如,如果我的收敛速度为0.5和两个角度:80°和40°,则输出应为70°和50°的几个角度(因此它们距会聚角度为60°的一半) )。这个配置相当明显,但我很难在一般情况下解决这个问题,因为我在三角测量方面非常糟糕,而且在我的职业生涯中从未使用角度,所以我没有经验。所以这个函数需要适用于角度的任何配置,并且出现问题,因为例如,如果差值> 180,我需要反转操作,因为角度表示为整数,我必须使用求和减法
我需要在Scala中实现它,但可以随意用Java,伪代码或任何其他流行语言编写您的建议,我希望将代码转换为Scala不会出现问题。
解决方案越轻越好。
答案 0 :(得分:1)
原始角度= o1 o2。
差异D = o2-o1(注意这是积极的,假设o1 中角M = o1 +(D / 2) 收敛因子= F 新角度= M + - (D / 2)* F 如果我是正确的,这就是所需要的。因为角度总是在0-360之间,并且假设你只需逆时针去寻找中间值和所有。
答案 1 :(得分:0)
这是我的朋友制作的一个实现。我知道它是 shitty scala代码,但是他用命令式伪代码写了它,我还没有将它转换为功能,但这是一个公平的解决方案。测试了很多输入,看起来很好。
def adjustAngles(aa1: Int, aa2: Int):(Int,Int)= {
def convergenceRate=0.5
var diff = aa2 - aa1;
var a1 = aa1
var a2 = aa2
if (diff > 180) {
diff -= 360;
} else if (diff < -180) {
diff += 360;
}
a1 = ((a1 + diff / 2 * convergenceRate) % 360).toInt;
if (a1 < 0) {
a1 += 360;
}
a2 = ((a2 - diff / 2 * convergenceRate) % 360).toInt
if (a2 < 0) {
a2 += 360;
}
(a1, a2)
}