JS: Abstracción de datos

Teoría: Puntos en el plano cartesiano

Una de las temáticas más convenientes para practicar habilidades de modelado es la geometría. A diferencia de otras secciones de las matemáticas, es visualmente representable e intuitiva para todos. Para empezar, recordemos los conceptos básicos con los que vamos a trabajar.

El plano cartesiano es un plano en el que se establece un sistema de coordenadas. Las coordenadas se establecen en dos líneas perpendiculares entre sí (ejes numéricos) x e y.

6 | y 5 | 4 | 3 | . (2, 3) 2 | 1 | | ---------------------------------------------------- | 1 2 3 4 5 6 x | | | | | |

El primitivo más simple que se puede ubicar en el plano es el punto. Su posición se determina por dos coordenadas, y en matemáticas se escribe así: (2, 3), donde el primer número es la coordenada en el eje x y el segundo es la coordenada en el eje y. En el código, se puede representar como un array que consta de dos elementos.

const point = [2, 3];

Esto es suficiente para realizar acciones geométricas útiles. Por ejemplo, para encontrar el punto simétrico respecto al eje x, solo es necesario invertir (cambiar el signo al opuesto) el segundo número.

6 | y 5 | 4 | 3 | . (2, 3) 2 | 1 | | ---------------------------------------------------- | 1 2 3 4 5 6 x -1 | -2 | -3 | . (2, -3) -4 | -5 | -6 |
const point = [2, 3];

const [x, y] = point;
// x = 2, y = 3

const symmetricalPoint = [x, -y];
// x = 2, y = -3

A veces es necesario encontrar el punto que se encuentra exactamente en el medio de otros dos puntos (también se dice que se debe encontrar el punto medio del segmento). Este punto se calcula encontrando el promedio aritmético de cada una de las coordenadas. Es decir, la coordenada x del punto "medio" es igual a (x1 + x2) / 2, y la coordenada y es igual a (y1 + y2) / 2.

const getMiddlePoint = (p1, p2) => {
  const x = (p1[0] + p2[0]) / 2;
  const y = (p1[1] + p2[1]) / 2;

  return [x, y];
};

const point1 = [2, 3];
const point2 = [-4, 0];

console.log(getMiddlePoint(point1, point2)); // => [-1, 1.5]

Hay muchas operaciones similares en geometría. Desde el punto de vista de la organización del código, todas las funciones relacionadas con el trabajo de los puntos se pueden colocar lógicamente en el módulo points.

A su vez, los puntos se agrupan en segmentos. Cada segmento se define por un par de puntos, uno de los cuales es el inicio y el otro es el final del segmento. En el código, se puede representar un segmento de manera similar a un punto, como un array de dos elementos en el que cada elemento es un punto.

const point1 = [3, 4];
const point2 = [-8, 10];
const segment = [point1, point2];