我的输入为0到359(即指南针)。
我想设置一个零点,如果该值低于或高于此值,则显示为-value或+ value。
示例:
Zero Point: 2
Input: 340 => Output: -22
Input: 22 => Output: 20
或
Zero Point: 40
Input: 30 => Output: -10
Input: 50 => Output: 10
所以无论指南针在哪里,输出总是相对于零点。
PS:甚至更短:如何将0-> 359的重复序列转换为线性序列,我可以使用正常数字线?因此,如果359达到向上计数2次,则函数告诉我它是720(我可能在这里错过了正确的值1°或2°)而不是359?
答案 0 :(得分:2)
假设你想要一个-179到180的输出,并且零点可以从0到359
int output(int deg, int zeropoint)
{
var relative = deg - zeropoint;
if (relative > 180)
relative -= 360;
else if (relative < -179)
relative += 360;
return relative;
}
答案 1 :(得分:2)
我认为这符合你的要求,但我对你的要求没有信心。基本上,给定一个特定大小的“时钟”,一个获得相对距离和输入值的点,它将找到与“时钟”上的点的最小距离,无论是负的还是正的。
static void Main(string[] args)
{
Console.WriteLine(getRelativeValue(2, 360, 340)); //-22
Console.WriteLine(getRelativeValue(2, 360, 22)); // 20
Console.WriteLine(getRelativeValue(2, 360, 178)); // 176
Console.Read();
}
static int getRelativeValue(int point, int upperBound, int value)
{
value %= upperBound;
int lowerBoundPoint = -(upperBound - value + point);
int upperBoundPoint = (value - point);
if (Math.Abs(lowerBoundPoint) > Math.Abs(upperBoundPoint))
{
return upperBoundPoint;
}
else
{
return lowerBoundPoint;
}
}
答案 2 :(得分:0)
int result = input - zero > 180 ? input - zero - 360 : input - zero;