MapValue फ़ंक्शन:
float mapValue( float inVal, float inFrom, float inTo, float outFrom, float outTo )
{
float inScale = (inFrom != inTo)
? ( ( inVal - inFrom ) / ( inTo - inFrom ) )
: 0.0f;
float outVal = outFrom + ( inScale * ( outTo - outFrom ) );
outVal = (outFrom < outTo )
? clamp( outVal, outFrom, outTo )
: clamp( outVal, outTo, outFrom );
return outVal;
}
यह एक मान लेता है, इसे एक सीमा के भीतर एक अनुपात में परिवर्तित करता है, और फिर दूसरी श्रेणी के सापेक्ष मापता है। डबल-लेरप की तरह।
सामान को सामान्य करने के लिए आप इसका उपयोग कर सकते हैं:
float minDamage = 0.0f; float maxDamage = 300.0f;
float normalisedDamage = mapValue(damange, minDamage, maxDamage, 0.0f, 1.0f);
या आप एक सीमा से दूसरी सीमा में परिवर्तित कर सकते हैं:
float brakeStrength = mapValue(timeToCollision,
0.0f, 10.0f, // seconds
1.0f, 0.2f // brake values
);
दूसरे उदाहरण में ध्यान दें कि आउट रेंज रेंज में एक अलग क्रम है।
यह ज्यादा नहीं दिखता है, लेकिन मैं इस छोटी सी बेला का उपयोग सभी जगह करता हूं।