Transformar una función permite mover, invertir, estirar o comprimir su gráfico sin cambiar por completo su estructura.
Una transformación modifica el gráfico de una función conocida. En vez de estudiar una función desde cero, podemos partir de una forma base y aplicar cambios controlados.
En programación, esta idea aparece al dibujar gráficos, animar objetos, adaptar valores de entrada, escalar datos o transformar coordenadas.
La función base es el modelo original antes de aplicar cambios. Por ejemplo, podemos partir de una función cuadrática simple.
Luego se pueden aplicar transformaciones para desplazarla, invertirla o cambiar su escala.
Primero definimos una función simple que usaremos en varios ejemplos.
function cuadratica(x) {
return x * x;
}
console.log(cuadratica(-2));
console.log(cuadratica(0));
console.log(cuadratica(3));
Las transformaciones más comunes son traslaciones, reflexiones y cambios de escala.
| Transformación | Forma general | Efecto |
|---|---|---|
| Traslación vertical | f(x) + k | Mueve el gráfico hacia arriba o abajo |
| Traslación horizontal | f(x - h) | Mueve el gráfico hacia la derecha o izquierda |
| Reflexión vertical | -f(x) | Invierte el gráfico respecto del eje X |
| Reflexión horizontal | f(-x) | Invierte el gráfico respecto del eje Y |
| Escalado vertical | a · f(x) | Estira o comprime la altura |
| Escalado horizontal | f(b · x) | Comprime o estira el ancho |
Sumar una constante al resultado de una función mueve todo el gráfico hacia arriba o hacia abajo.
function cuadratica(x) {
return x * x;
}
function trasladarVertical(funcion, k) {
return function(x) {
return funcion(x) + k;
};
}
const arriba = trasladarVertical(cuadratica, 3);
console.log(cuadratica(2));
console.log(arriba(2));
Restar una constante dentro de la entrada desplaza el gráfico hacia la derecha. Sumarlas dentro de la entrada lo desplaza hacia la izquierda.
function cuadratica(x) {
return x * x;
}
function trasladarHorizontal(funcion, h) {
return function(x) {
return funcion(x - h);
};
}
const derecha = trasladarHorizontal(cuadratica, 2);
console.log(cuadratica(2));
console.log(derecha(2));
console.log(derecha(4));
Multiplicar la salida por -1 refleja el gráfico respecto del eje horizontal.
function cuadratica(x) {
return x * x;
}
function reflejarVertical(funcion) {
return function(x) {
return -funcion(x);
};
}
const invertida = reflejarVertical(cuadratica);
console.log(cuadratica(3));
console.log(invertida(3));
Cambiar el signo de la entrada refleja el gráfico respecto del eje vertical.
function lineal(x) {
return 2 * x + 1;
}
function reflejarHorizontal(funcion) {
return function(x) {
return funcion(-x);
};
}
const reflejada = reflejarHorizontal(lineal);
console.log(lineal(3));
console.log(reflejada(3));
Multiplicar la salida por un número cambia la altura del gráfico. Si el factor es mayor que 1, se estira. Si está entre 0 y 1, se comprime.
function cuadratica(x) {
return x * x;
}
function escalarVertical(funcion, factor) {
return function(x) {
return funcion(x) * factor;
};
}
const alta = escalarVertical(cuadratica, 2);
const baja = escalarVertical(cuadratica, 0.5);
console.log(cuadratica(3));
console.log(alta(3));
console.log(baja(3));
Multiplicar la entrada por un factor modifica el ancho del gráfico. Este efecto puede resultar menos intuitivo porque ocurre dentro de la función.
function cuadratica(x) {
return x * x;
}
function escalarHorizontal(funcion, factor) {
return function(x) {
return funcion(x * factor);
};
}
const comprimida = escalarHorizontal(cuadratica, 2);
console.log(cuadratica(2));
console.log(comprimida(2));
Una misma función puede recibir varias transformaciones al mismo tiempo. El orden importa, especialmente cuando se combinan cambios dentro y fuera de la función.
Esta forma permite desplazar horizontalmente, escalar verticalmente y trasladar verticalmente una función base.
Este ejemplo aplica desplazamiento horizontal, escala vertical y desplazamiento vertical sobre una función cuadrática.
function cuadratica(x) {
return x * x;
}
function transformar(funcion, opciones) {
return function(x) {
const entrada = x - opciones.desplazamientoX;
const salida = funcion(entrada) * opciones.escalaY;
return salida + opciones.desplazamientoY;
};
}
const transformada = transformar(cuadratica, {
desplazamientoX: 2,
desplazamientoY: 3,
escalaY: 2
});
console.log(transformada(2));
console.log(transformada(3));
console.log(transformada(4));
Para dibujar una función en pantalla, normalmente se calcula una lista de puntos. Las transformaciones pueden aplicarse antes de renderizar.
function generarPuntos(funcion, desde, hasta, paso) {
const puntos = [];
for (let x = desde; x <= hasta; x += paso) {
puntos.push({ x, y: funcion(x) });
}
return puntos;
}
function cuadratica(x) {
return x * x;
}
console.log(generarPuntos(cuadratica, -2, 2, 1));
Una tabla permite observar cómo cambian los valores al aplicar una transformación.
function cuadratica(x) {
return x * x;
}
function transformada(x) {
return 2 * cuadratica(x - 1) + 3;
}
for (let x = -1; x <= 3; x++) {
console.log({
x,
original: cuadratica(x),
transformada: transformada(x)
});
}
Las transformaciones de funciones no son solo una idea gráfica. También sirven para adaptar datos y controlar comportamientos.
Un caso común consiste en tomar un valor de entrada y convertirlo a otro rango para mostrarlo en una interfaz.
function mapear(valor, entradaMin, entradaMax, salidaMin, salidaMax) {
const proporcion = (valor - entradaMin) / (entradaMax - entradaMin);
return salidaMin + proporcion * (salidaMax - salidaMin);
}
console.log(mapear(50, 0, 100, 0, 1));
console.log(mapear(75, 0, 100, 200, 400));
Cuando se dibuja una función, muchas veces se transforma la coordenada matemática a coordenada de pantalla. Esto suele incluir escala, traslación e inversión del eje Y.
function aPantalla(punto, origen, escala) {
return {
x: origen.x + punto.x * escala,
y: origen.y - punto.y * escala
};
}
console.log(aPantalla({ x: 2, y: 3 }, { x: 100, y: 100 }, 20));
console.log(aPantalla({ x: -1, y: -2 }, { x: 100, y: 100 }, 20));
Las transformaciones de funciones permiten construir muchas variaciones a partir de una forma conocida. Esta técnica ayuda a razonar sobre gráficos y también a escribir programas más claros cuando se transforman posiciones, valores o señales.