第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何縮小具有已知最小值和最大值的數(shù)字范圍

如何縮小具有已知最小值和最大值的數(shù)字范圍

holdtom 2019-09-18 10:45:20
因此,我試圖找出如何獲取一系列數(shù)字并將值縮小到適合范圍。想要這樣做的原因是我試圖在java swing jpanel中繪制省略號。我希望每個橢圓的高度和寬度在1-30的范圍內(nèi)。我有從我的數(shù)據(jù)集中找到最小值和最大值的方法,但是直到運行時才會有min和max。是否有捷徑可尋?
查看完整描述

3 回答

?
慕雪6442864

TA貢獻1812條經(jīng)驗 獲得超5個贊

假設您要將范圍縮放[min,max]到[a,b]。您正在尋找滿足的(連續(xù))功能


f(min) = a

f(max) = b

在你的情況下,a將是1,b將是30,但讓我們從更簡單的東西開始,并嘗試映射[min,max]到范圍[0,1]。


把min成函數(shù)獲得了0可以與實現(xiàn)


f(x) = x - min   ===>   f(min) = min - min = 0

這幾乎就是我們想要的。但是當我們真正想要時,投入max會給我們max - min1.所以我們必須擴展它:


        x - min                                  max - min

f(x) = ---------   ===>   f(min) = 0;  f(max) =  --------- = 1

       max - min                                 max - min

這就是我們想要的。所以我們需要進行翻譯和縮放。現(xiàn)在,如果不是我們想要得到的任意值a和b,我們需要一些更復雜的:


       (b-a)(x - min)

f(x) = --------------  + a

          max - min

您可以驗證投入min對x現(xiàn)在給a,并把在max給b。


您可能還會注意到,這(b-a)/(max-min)是新范圍大小與原始范圍大小之間的縮放系數(shù)。因此,其實我們是第一平移x通過-min,它擴展到了正確的因素,然后再翻譯回最多的新的最小值a。


希望這可以幫助。


查看完整回答
反對 回復 2019-09-18
?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

這里有一些用于復制粘貼的JavaScript(這是煩人的答案):


function scaleBetween(unscaledNum, minAllowed, maxAllowed, min, max) {

  return (maxAllowed - minAllowed) * (unscaledNum - min) / (max - min) + minAllowed;

}

像這樣應用,將范圍10-50縮放到0-100之間的范圍。


var unscaledNums = [10, 13, 25, 28, 43, 50];


var maxRange = Math.max.apply(Math, unscaledNums);

var minRange = Math.min.apply(Math, unscaledNums);


for (var i = 0; i < unscaledNums.length; i++) {

  var unscaled = unscaledNums[i];

  var scaled = scaleBetween(unscaled, 0, 100, minRange, maxRange);

  console.log(scaled.toFixed(2));

}

0.00,18.37,48.98,55.10,85.71,100.00


編輯:


我知道我很久以前就回答了這個問題,但是我現(xiàn)在使用的是一個更清潔的功能:


Array.prototype.scaleBetween = function(scaledMin, scaledMax) {

  var max = Math.max.apply(Math, this);

  var min = Math.min.apply(Math, this);

  return this.map(num => (scaledMax-scaledMin)*(num-min)/(max-min)+scaledMin);

}

應用如下:


[-4, 0, 5, 6, 9].scaleBetween(0, 100);

[0,30.76923076923077,69.23076923076923,76.92307692307692,100]


查看完整回答
反對 回復 2019-09-18
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

為方便起見,這里是Java形式的Irritate算法。根據(jù)需要添加錯誤檢查,異常處理和調(diào)整。


public class Algorithms { 

    public static double scale(final double valueIn, final double baseMin, final double baseMax, final double limitMin, final double limitMax) {

        return ((limitMax - limitMin) * (valueIn - baseMin) / (baseMax - baseMin)) + limitMin;

    }

}

測試:


final double baseMin = 0.0;

final double baseMax = 360.0;

final double limitMin = 90.0;

final double limitMax = 270.0;

double valueIn = 0;

System.out.println(Algorithms.scale(valueIn, baseMin, baseMax, limitMin, limitMax));

valueIn = 360;

System.out.println(Algorithms.scale(valueIn, baseMin, baseMax, limitMin, limitMax));

valueIn = 180;

System.out.println(Algorithms.scale(valueIn, baseMin, baseMax, limitMin, limitMax));


90.0

270.0

180.0


查看完整回答
反對 回復 2019-09-18
  • 3 回答
  • 0 關注
  • 979 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號