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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

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


f(min) = a

f(max) = b

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


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


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

這幾乎就是我們想要的。但是當(dāng)我們真正想要時(shí),投入max會(huì)給我們max - min1.所以我們必須擴(kuò)展它:


        x - min                                  max - min

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

       max - min                                 max - min

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


       (b-a)(x - min)

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

          max - min

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


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


希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊

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


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

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

}

像這樣應(yīng)用,將范圍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


編輯:


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


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);

}

應(yīng)用如下:


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

[0,30.76923076923077,69.23076923076923,76.92307692307692,100]


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
慕后森

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

為方便起見(jiàn),這里是Java形式的Irritate算法。根據(jù)需要添加錯(cuò)誤檢查,異常處理和調(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;

    }

}

測(cè)試:


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


查看完整回答
反對(duì) 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 991 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)