当前位置:  开发笔记 > 编程语言 > 正文

数学 - 映射数字

如何解决《数学-映射数字》经验,为你挑选了3个好方法。

如何在a和b之间线性地映射数字以在c和d之间进行.

也就是说,我希望2到6之间的数字映射到10到20之间的数字......但我需要一般化的情况.

我的大脑是油炸的.



1> PeterAllenWe..:

如果您的数字X在A和B之间,并且您希望Y在C和D之间,则可以应用以下线性变换:

Y =(XA)/(BA)*(DC)+ C.

这应该会给你你想要的东西,虽然你的问题有点模棱两可,因为你也可以反过来映射间隔.只要注意除以零,你应该没问题.


然后可以通过单击旁边的刻度标记将此答案标记为"已接受".
为清楚起见,我喜欢new_value =(old_value - old_bottom)/(old_top - old_bottom)*(new_top - new_bottom)+ new_bottom;

2> Konrad Rudol..:

除以获得两个范围的大小之间的比率,然后减去初始范围的起始值,乘以比率并添加第二个范围的起始值.换一种说法,

R = (20 - 10) / (6 - 2)
y = (x - 2) * R + 10

这均匀地分散了第二个范围中第一个范围的数字.



3> Sourabh Bhat..:

java.lang.Math类中使用此功能会很不错,因为这是一个广泛需要的功能,并且可以在其他语言中使用.这是一个简单的实现:

final static double EPSILON = 1e-12;

public static double map(double valueCoord1,
        double startCoord1, double endCoord1,
        double startCoord2, double endCoord2) {

    if (Math.abs(endCoord1 - startCoord1) < EPSILON) {
        throw new ArithmeticException("/ 0");
    }

    double offset = startCoord2;
    double ratio = (endCoord2 - startCoord2) / (endCoord1 - startCoord1);
    return ratio * (valueCoord1 - startCoord1) + offset;
}

我将此代码作为未来自己的参考,可能会帮助某人.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有