webForumDet fria alternativet

Scale value

5 svar · 395 visningar · startad av xhlin

xhlinMedlem sedan sep. 200576 inlägg
#1

hej!
jag undrar om någon vet något smidigt sätt att skala värden..
låt säga att 'a' har ett interval:
-180 < a < 180
och skall skalas om till 0 < a < 360

val = a._rotation;
scaleValue(val,-180,180,0,360);

function scaleValue(val, min, max, minOut, maxOut){
...
}

MVH
_x

doridoriMedlem sedan juni 2006244 inlägg
#2

Menar du att i första fallet -180 < a < 180, så är A t.ex -160 (20 ifrån min-värdet).
Och om du då ändrar max/min till 0/360 så ska A bli 20. (20 ifrån min-värdet).

Eller?

Det enklaste i just det exempel du nämner är ju att bara öka A med 180.
Men det kanske du redan är medveten om.
Om funktionen ska skala värdet när man ändrar till ett mindre intervall kanske det blir en mer komplicerad uträkning...

Men det ska vi väl kunna räkna fram :)

xhlinMedlem sedan sep. 200576 inlägg
#3

ja precis, ett lättare fall att tänka sig är att, 0 < a < 100 skall skalas om till 0 < b < 50;
men jag fattar inte hur jag ska få ihop formeln..
i detta fall blir, val = a, min = 0, max = 100, minOut = 0, maxOut = 50;
om nu val = 100 så ska ju outputen bli val - maxOut (100-50 = 50);
men om val = 0 så stämmer ju inte detta (0-50 = -50)
det ska ju vara dynamiskt på något tjusigt sätt..
Uppskattar ditt försök!

MVH

DenkanMedlem sedan juni 2002256 inlägg
#4

Så här hade jag nog beräknat det:

-180 < a < 180

a = 90
min = -180
max = 180
diff = max-min = 360

// Värdet i procentenheter bör väl vara nyckeln..?
a_perc = a/diff = 90/360 = 0,25

minOut = 0
maxOut = 100
diffOut = maxOut-minOut = 100

a_scale = diffOut * a_perc = 25

[edit]
a_scale är inte slutgiltiga värdet du vill ha, utan det som ska läggas på minOut. Dvs:
newvalue = minOut + a_scale

[edit 2]
Nu är jag ute och cyklar, stämmer ju inte. Återkommer :)

DenkanMedlem sedan juni 2002256 inlägg
#5

Okej, jag har labbat med följande funktion och den verka se vettigare ut:

var scaleValue = function(val:Number, min:Number, max:Number, minOut:Number, maxOut:Number):Number{
	var diff = max-min;
	var a_perc = (a-min)/diff;
	
	var diffOut = maxOut-minOut;
	var newval = minOut + (diffOut * a_perc);
	
	return newval;
} 

var a = 90;
trace('new scale value: ' +scaleValue(a,-180,180,0,100));
xhlinMedlem sedan sep. 200576 inlägg
#6

funkar perfekt!!
tack så mycket!!

124 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)