C# 设置一个零点,如果该值低于或高于该值,则显示为-value或+;价值
我有一个0到359的输入(指南针) 我想设置一个零点,如果该值低于或高于此值,则显示为-value或+value 例如:C# 设置一个零点,如果该值低于或高于该值,则显示为-value或+;价值,c#,c#-4.0,C#,C# 4.0,我有一个0到359的输入(指南针) 我想设置一个零点,如果该值低于或高于此值,则显示为-value或+value 例如: Zero Point: 2 Input: 340 => Output: -22 Input: 22 => Output: 20 或 所以无论罗盘在哪里,输出总是相对于零点 PS:或者更简短:我如何将0->359的重复序列转换成一个线性序列,就像正常的数字行一样?因此,如果向上计数2次达到359,函数告诉我它在720(我可能在这里错过了正确的值1°或2°),而不是
Zero Point: 2
Input: 340 => Output: -22
Input: 22 => Output: 20
或
所以无论罗盘在哪里,输出总是相对于零点
PS:或者更简短:我如何将0->359的重复序列转换成一个线性序列,就像正常的数字行一样?因此,如果向上计数2次达到359,函数告诉我它在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;
}
int输出(int度,int零点)
{
var相对=度-零点;
如果(相对>180)
相对-=360;
否则如果(相对<-179)
相对+=360;
回归关系;
}
假设您想要从-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;
}
int输出(int度,int零点)
{
var相对=度-零点;
如果(相对>180)
相对-=360;
否则如果(相对<-179)
相对+=360;
回归关系;
}
我认为这符合您的要求,但我对您的要求没有信心。基本上,给定一个特定大小的“时钟”、一个获取相对距离的点和一个输入值,它将找到到“时钟”上的点的最小距离,无论是负距离还是正距离
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;
}
}
我认为这符合你的要求,但我对你的要求没有信心。基本上,给定一个特定大小的“时钟”、一个获取相对距离的点和一个输入值,它将找到到“时钟”上的点的最小距离,无论是负距离还是正距离
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;
}
}
你试过什么?这里也没有足够的信息来提供帮助。设置什么?你的输出是什么?您如何确定这些输入的输出?为什么340的输出为-22?正负值之间的边界在哪里?您是否尝试自己创建这样的方法?粘贴你的代码。@filipko边界是零点。@user2348735我想你不明白。假设我们有输入182。我们怎么知道它的输出是180还是-179?@user2348735:那么,不可能用简单的算术运算(例如减法)来演示逻辑吗?那么根本就没有解决方案,否则你已经找到了解决方案。你尝试了什么?这里也没有足够的信息来提供帮助。设置什么?你的输出是什么?您如何确定这些输入的输出?为什么340的输出为-22?正负值之间的边界在哪里?您是否尝试自己创建这样的方法?粘贴你的代码。@filipko边界是零点。@user2348735我想你不明白。假设我们有输入182。我们怎么知道它的输出是180还是-179?@user2348735:那么,不可能用简单的算术运算(例如减法)来演示逻辑吗?那么根本就没有解决方案,否则你已经有了解决方案。如果
的话,你应该将答案改为使用else
,而不是else,否则+1否-如果相对值已经在预期范围内,就不应该进行标准化(既不加也不减360)啊,对不起,我错过了那一位-还没有醒来!您应该将答案更改为使用else
而不是else if
但如果是+1否-如果相对值已在预期范围内,则不应进行标准化(既不加也不减360)啊,对不起,我错过了那一位-尚未醒来!