[Flash 9+]
september 2015
Smooth step for AS3
__ Math.cos
__ smoothstep2
__ smoothstep
Smoothstep is a scalar interpolation function commonly used in computer graphics and video game engines.
The function interpolates smoothly between two input values based on a third one that should be between the first two. The returned value is clamped between 0 and 1.
The slope of the smoothstep function tends toward zero at both edges. This makes it easy to create a sequence of transitions using smoothstep to interpolate each segment rather than using a more sophisticated or expensive interpolation technique.
source : https://en.wikipedia.org/wiki/Smoothstep
package { import flash.display.Sprite; /** * ... * @author YopSolo */ public class Main extends Sprite { public function Main() { var step:Number = .01; graphics.lineStyle(0, 0x0000ff); // blue for (var x:Number = 0.0; x < 1; x += step) { var y:Number = 1 - smoothstep(0, 1, x); if (x == 0.0) { graphics.moveTo(x * 400, y * 400); } else { graphics.lineTo(x * 400, y * 400); } } // smoothstep2 graphics.lineStyle(0, 0x00ff00); // green for (x = 0.0; x < 1; x += step) { y = 1 - smoothstep2(0, 1, x); if (x == 0.0) { graphics.moveTo(x * 400, y * 400); } else { graphics.lineTo(x * 400, y * 400); } } // Cos graphics.lineStyle(0, 0xff0000); // red for (x = 0; x < 1; x += step) { y = Math.cos(Math.PI * x) * .5 + .5; if (x == 0) { graphics.moveTo(x * 400, y * 400); } else { graphics.lineTo(x * 400, y * 400); } } } //http://en.wikipedia.org/wiki/Smoothstep private function smoothstep(e0:Number, e1:Number, x:Number):Number { x = Math.min(Math.max((x - e0) / (e1 - e0), 0.0), 1.0); return x * x * (3 - 2 * x); } private function smoothstep2(edge0:Number, edge1:Number, x:Number):Number { // Scale, bias and saturate x to 0..1 range x = Math.min(Math.max((x - edge0) / (edge1 - edge0), 0.0), 1.0); // Evaluate polynomial return x * x * x * (x * (x * 6 - 15) + 10); } } }