将一个范围内的数字转换为另一个范围内的数字

发布于 2024-10-03 14:59:46 字数 459 浏览 12 评论 0原文

可能的重复:
将数字范围转换为另一个范围,保持比率

所以我有一个返回 0 到 255 之间的值的函数,我需要将这些值转换为 -255 到 255 之间的值 所以 200 大约等于 145,150 大约等于 45,依此类推。 我看过 将数字范围转换为另一个范围,保持比率 但那里的公式不起作用。 我还可以使用其他公式吗?

Possible Duplicate:
Convert a number range to another range, maintaining ratio

So I have a function that returns values within 0 and 255 and I need to convert these values to something between -255 and 255
So 200 would be roughly 145, 150 would be roughly 45 and so on..
I have looked at Convert a number range to another range, maintaining ratio but the formulas there won't work.
Any other formula I could use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

画▽骨i 2024-10-10 14:59:46
public static int ConvertRange(
    int originalStart, int originalEnd, // original range
    int newStart, int newEnd, // desired range
    int value) // value to convert
{
    double scale = (double)(newEnd - newStart) / (originalEnd - originalStart);
    return (int)(newStart + ((value - originalStart) * scale));
}
public static int ConvertRange(
    int originalStart, int originalEnd, // original range
    int newStart, int newEnd, // desired range
    int value) // value to convert
{
    double scale = (double)(newEnd - newStart) / (originalEnd - originalStart);
    return (int)(newStart + ((value - originalStart) * scale));
}
猫性小仙女 2024-10-10 14:59:46

试试这个:

int Adjust( int num )
{
    return num * 2 - 255;
}

Try this:

int Adjust( int num )
{
    return num * 2 - 255;
}
沉睡月亮 2024-10-10 14:59:46

任意范围的通用解决方案...

var val1 = 200;
var min1 = 0;
var max1 = 255;
var range1 = max1 - min1;

var min2 = -255;
var max2 = 255;
var range2 = max2 - min2;

var val2 = val1*range2/range1 + min2;

General solution for arbitrary range...

var val1 = 200;
var min1 = 0;
var max1 = 255;
var range1 = max1 - min1;

var min2 = -255;
var max2 = 255;
var range2 = max2 - min2;

var val2 = val1*range2/range1 + min2;
妄司 2024-10-10 14:59:46
public int ConvertRange(
           int originalStart, int originalEnd,
           int newStart, int newEnd,
           int value)
{

  int originalDiff = originalEnd - originalStart;
  int newDiff = newEnd - newStart;
  int ratio = newDiff / originalDiff;
  int newProduct = value * ratio;
  int finalValue = newProduct + newStart;
  return finalValue; 

}
public int ConvertRange(
           int originalStart, int originalEnd,
           int newStart, int newEnd,
           int value)
{

  int originalDiff = originalEnd - originalStart;
  int newDiff = newEnd - newStart;
  int ratio = newDiff / originalDiff;
  int newProduct = value * ratio;
  int finalValue = newProduct + newStart;
  return finalValue; 

}
ゝ杯具 2024-10-10 14:59:46

调整后 = 原始值 / 255 * 510 - 255

145 = 200 / 255 * 510 - 255
 45 = 145 / 255 * 510 - 255

Adjusted = original / 255 * 510 - 255

145 = 200 / 255 * 510 - 255
 45 = 145 / 255 * 510 - 255
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文