设置一个零点,如果值低于或高于此值,则显示为-value或+value
本文关键字:高于此 显示 +value -value 一个 零点 设置 如果 | 更新日期: 2023-09-27 18:12:40
我有一个输入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?
假设您想要从-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;
}
我认为这符合您的要求,但我对您的要求没有信心。基本上,给定一个一定大小的"时钟",一个点的相对距离和一个输入值,它将找到到"时钟"上的点的最小距离,要么是负的,要么是正的。
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;
}
}
int result = input - zero > 180 ? input - zero - 360 : input - zero;