¿Son realmente necesarias las Matemáticas en la Programación?

En un día normal como cualquier otro utilizamos las matemáticas lo queramos o no, que si vamos al súper, que si pagamos el uber, que cuántos trocitos de perejil para la comida, yo diría que es bastante la presencia de las matemáticas en nuestra vida.

Cuando programamos esto es básico, ya que utilizamos la compra en línea, hay que hacer descuentos especiales, que si más el IVA, que promociones por fin de año, son tan diversos que es imposible escapar de las matemáticas.


Cuando te inclinas aprender a programar es cuestión de esfuerzo, dedicación y mucha paciencia, dos de los pilares fundamentales son la lógica computacional y las matemáticas en la programación.

La lógica matemática es el concepto más importante heredado de las matemáticas en la programación.

Tenemos que tener claro cuál es el problema y resolverlo, podemos utilizar varias técnicas como separar por partes el problema e ir resolviendo paso a paso, haciendo uso de sus operadores lógicos como el “if”,  “else”, ”&”, “+”, “-”, “>”, “=”, así pues al hacer uso de la lógica podemos resolver  problemas que parecerían ser bastante complejos pero en realidad no lo son tanto.

Desde mi punto de vista, al ser matemático de carrera y al ingresar a este mundo de la programación, me di cuenta que van tomadas de la mano una de la otra (matemáticas y programación), y que la esencia misma está en la lógica, cuando tienes sólidas bases de esta materia, puedes empezar a aprender cualquier lenguaje de programación y no será tan difícil de entender, la estructura, sus secuencias y los métodos empleados serán aprendidos de una forma más sencilla.

Mostraré un ejemplo sencillo para comparar las posiciones relativas de nuestros elementos gráficos en la pantalla.

Ángulo entre dos puntos. Es muy sencillo de calcular gracias a la función atan2, una variante muy útil de la arcotangente y que se encuentra presente en la mayoría de lenguajes de programación (o  librerías matemáticas, en su defecto).

//ángulo en grados entre dos puntos
private function rotation Degrees Two Points(p1:Point, p2:Point):Number
{
return 180*Math.atan2(p2.y - p1.y, p2.x- p1.x)/Math.PI;
}

Distancia entre dos puntos. La fórmula de la distancia euclidiana debería ser de sobra conocida por todos.
Tan sólo un apunte de optimización: si podemos, hemos de evitar computar la raíz cuadrada, ya que es una operación bastante costosa de calcular para el procesador.

Por ejemplo, si lo que queremos es comparar distancias para ver qué elementos están más cerca o más lejos, no será necesario en absoluto calcular las raíces cuadradas de todos los valores, ya que los órdenes relativos se mantienen al elevar al cuadrado. En notación matemática se podría expresar así:
(x > y) <-> (x*x > y*y)
Si queremos medir un radio de alcance o valor umbral para algún efecto, podemos operar todo el tiempo con el radio/umbral al cuadrado (pre calculado) para ahorrarnos la molesta raíz cuadrada.

 //elevar número al cuadrado
 function sqr(x:Number):Number
 {
 return x * x;
 }

//Distancia entre dos puntos (al cuadrado)
 function distBetweenPointsSquared(v:Point, w:Point):Number
 {
 return sqr(v.x - w.x) + sqr(v.y - w.y);
 }

A partir de esta fórmula podemos construir otra que también resulta muy útil, Distancia entre punto y segmento. Como en el caso anterior, evitaremos computar la raíz cuadrada y devolveremos el valor de la distancia al cuadrado. Es bastante más complicada ya que tenemos que contemplar todas las posibilidades:

 //distancia mínima entre punto p y segmento vw
 function distToSegmentSquared(p:Point, v:Point, w:Point):Number
 {
 var longSeg:Number = distBetweenPointsSquared(v, w);

if (longSeg == 0) return distBetweenPointsSquared(p, v);

var t:Number = ((p.x - v.x) * (w.x - v.x) + (p.y - v.y) * (w.y - v.y)) / longSeg;

if (t &lt; 0) return distBetweenPointsSquared(p, v);

if (t &gt; 1) return distBetweenPointsSquared(p, w);

return distBetweenPointsSquared(p,
 new Point(
  v.x + t * (w.x - v.x),
  v.y + t * (w.y - v.y))
  );
 }

Como vemos no es tan difícil programar usando las matemáticas. Cada programa es una historia diferente. Si estás programando un juego,  necesitarás refrescar tus matrices, la trigonometría. Si estás haciendo un programa para que optimice los viajes de un camión, necesitarás refrescar el método simplex.

Si es un programa de cálculo de estructuras, necesitarás las ecuaciones diferenciales y así se podría continuar. Es imposible totalmente saber qué rama de las matemáticas se va a necesitar para realizar un programa. Por eso la enseñanza de las matemáticas tiene que ser generalista, para que en el momento que se necesite, uno aprenda y pueda aplicar el tema que se requiera.

Referencia.

Ejemplo tomado de:
http://www.lostiemposcambian.com/blog/as3/tips-matematicos- geometria-programacion- videojuegos/

Deja un comentario