【发布时间】:2011-07-09 11:30:30
【问题描述】:
我正在尝试计算从一个交叉点到另一个交叉点的旋转。十字线之间的对应关系是已知的。
旋转需要在 180 度内计算,无论是顺时针还是逆时针,目前我可以在 90 度内计算,但算法在任何更大的情况下都会失败。问题似乎是当匹配的轴承通过大约 360 度时,即 A = 350 和 A' = 80。对每条十字线重复此操作,会导致计算的总旋转不正确。
目前的算法,用于比较两条线之间的旋转,从两个十字是;其中 crossB 和 crossA 是每个十字的对应方位。
if ((crossB < 360 && crossB >= 270)
&& (crossA >= 0 && crossA < 90))
{
angle = -((360) - crossB) - crossA;
}
else if ((crossA < 360 && crossA >= 270)
&& (crossB >= 0 && crossB < 90)
{
angle = crossB + (360 - crossA);
}
else
{
angle = crossB - crossA;
}
关于如何改进或更改算法以允许确定任意旋转量的任何想法?
【问题讨论】:
-
如果您希望输入在 0 和 360 之间,则使用模运算符 (%) 确保它在该范围内:
int deg = val % 360;' - that will take a value inval` 并通过除以 @987654323 确保它在 360 范围内@ 乘以 360,并将余数分配给deg。 -
作为一个方位,它总是在 360 度以内,但是由于上述算法会检查每条对应线之间的角度以计算平均值,因此方位的某些变化不能提供正确的旋转