Eli tarvitsisin jonkinlaisen laskukaavan jolla tulee luvusta 1000 -> 1 ja 10000 -> 2.5 ja siinä välillä kaikki luvut tasaisesti yhdestä kahteen ja puoleen. Olen miettinyt pääni puhki mutta en ole saanut aikaiseksi oikein mitään. Voisiko joku auttaa?
Serkku keksi jotakin näinkin ovelaa (hmmph... miksen minä keksinyt >.<): y = 1/6000 * x + 5/6
x siis alkuperäinen muuttuja, esim 1000....
f(x)=x*1/6000-5/6
Ja jos kiinnostaa miten keksin tämän kaavan niin yksi tapa on tämä:
f(x)=ax+b
ja alkuarvoista saa seuraavat
f(1000)=1000*a+b=1
f(10000)=10000*a+b=2.5
ratkaisemalla tuo yhtälötyhmä saadaan
a=1/6000
b=5/6
sijoittamalla a ja b funktioon f saadaan
f(x)=x*1/6000+5/6
edit: hidas minä
Ja tuohan tuli siis ratkomalla yhtälöt:
1000a + b = 1 10000a + b = 5/2
EDIT: noh, myöhässä.
Tälläisen ongelman pystyy ratkaisemaan todella helposti päässälaskuna, kun skaalaa molemmat lukuparit välille [0, 1] ja sitten yhdistää skaalaukseen tarvittavat laskutoimitukset. Käytännössä tässä tullaan ratkaistuksi edellä mainittu yhtälöryhmä, mutta sen ratkaisua ei juurikaan tarvitse miettiä. Vastaavia skaalauksia tulee tehtya esim. muuttaessa satunnaislukumuuttuja, jollekin tietylle lukualueelle.
[1000, 10000] | -1000 [0, 9000] | :9000 [0, 1] [1, 2.5] | -1 [0, 1.5] | :1.5 [0, 1] -> f(x) = (x - 1000)/9000 * 1.5 +1 = x / 6000 + 5/6
Okei, kiitoksia kaikille, en olisi itse keksinyt mokomaa kaavaa vaikka olisi ollut vuosi aikaa. :D Ja jos kiinnostaa mihin sitä tarvitsen niin tuota kaavaa käytän erään peliprojektin auton moottorin äänenkorkeuden laskemiseen kierrosluvuista.
Aihe on jo aika vanha, joten et voi enää vastata siihen.