Smoothstep
# Smoothstep

Smoothstep è una famiglia di funzioni sigmoidee usate per l'interpolazione hermitiana e per il clamping in computer grafica, motori grafici, e apprendimento automatico.

Le smoothstep sono funzioni di una variabile reale a valori in $[0,1]$, caratterizzate da due parametri $a$ e $b$ rappresentanti gli estremi di un intervallo $[a,b]$ di valori nel dominio. Per ogni $x\in \mathbb {R}$, smoothstep mappa i valori $x\in (a,b)$ all'intervallo $(0,1)$, mentre tutti i valori $x\leq a$ sono mappati in zero, e tutti i valori $x\geq b$ sono mappati in 1. Una funzione smoothstep normalizzata ha parametri $a=0$ e $b=1$. Nel seguito, quando non differentemente specificato, si assume che la funzione smoothstep sia normalizzata.

La funzione smoothstep di ordine $n$ interpola i valori tra 0 e 1 in modo tale che:

* quando la variabile è all'estremo sinistro dell'intervallo, l'immagine della funzione sia 0;
* quando la variabile è all'estremo destro dell'intervallo, l'immagine della funzione sia 1;
* le derivate (fino all'ordine $n$) della funzione presso gli estremi destro e sinistro abbiano valore zero.

Una funzione polinomiale che soddisfi tali vincoli può essere definita tramite l'interpolazione di Hermite. La funzione smoothstep per antonomasia è quella di primo ordine $\operatorname {S} _{1}(x)$, definita da un polinomio di terzo grado:

    $\operatorname {smoothstep} (x)=\operatorname {S} _{1}(x)={\begin{cases}0,&x<0,\\3x^{2}-2x^{3},&0\leq x\leq 1,\\1,&x>1.\\\end{cases}}$

Restringendo il dominio in $[0,1]$, la sua inversa può essere espressa analiticamente come:

    $\operatorname {S} _{1}^{-1}(x)={\frac {1}{2}}-\sin \left({\frac {\sin ^{-1}(1-2x)}{3}}\right).$

La funzione smoothstep di ordine $n$ è rappresentata nella porzione centrale da un polinomio di Hermite di grado $2n+1$ e ha forma:

    $\operatorname {S} _{n}(x)={\begin{cases}0,&x<0,\\x^{n+1},\sum _{k=0}^{n}{\binom {n+k}{k}}{\binom {2n+1}{n-k}}(-x)^{k}&0\leq x\leq 1,\\1,&x>1.\\\end{cases}}$

La funzione smoothstep di ordine zero $\operatorname {S} _{0}(x)$ è equivalente alla funzione identità troncata (nota in alcuni contesti, ad esempio in computer grafica, come funzione clamp):

    $\operatorname {S} _{0}(x)={\begin{cases}0,&x<0,\\x,&0\leq x\leq 1,\\1,&x>1.\\\end{cases}}$

La funzione smoothstep di secondo ordine $\operatorname {S} _{2}(x)$, anche nota come smootherstep e popolarizzata in computer grafica da Ken Perlin, ha forma:

    $\operatorname {smootherstep} (x)=S_{2}(x)={\begin{cases}0,&x<0,\\6x^{5}-15x^{4}+10x^{3},&0\leq x\leq 1,\\1,&x>1.\\\end{cases}}$

Le successive funzioni smoothstep fino al sesto ordine sono rappresentate nell'intervallo $[0,1]$ dai seguenti polinomi:

    ${\begin{aligned}\operatorname {S} _{3}(x)&=-20x^{7}+70x^{6}-84x^{5}+35x^{4};\\\operatorname {S} _{4}(x)&=70x^{9}-315x^{8}+540x^{7}-420x^{6}+126x^{5};\\\operatorname {S} _{5}(x)&=-252x^{11}+1386x^{10}-3080x^{9}+3465x^{8}-1980x^{7}+462x^{6};\\\operatorname {S} _{6}(x)&=924x^{13}-6006x^{12}+16380x^{11}-24024x^{10}+20020x^{9}-9009x^{8}+1716x^{7}.\\\end{aligned}}$
