El producto cruz se puede usar para determinar si un punto está ubicado a la izquierda o derecha de una línea definida por dos puntos. Supongamos que la línea pasa por los puntos
El cálculo se realiza con el producto cruz:
La distancia euclidiana mide la longitud de la línea recta entre dos puntos en un espacio n-dimensional. Para dos puntos
En un espacio tridimensional (
La distancia Manhattan, también conocida como distancia de "taxista" o distancia "cuadrada", mide la suma de las diferencias absolutas en cada dimensión entre dos puntos
En un espacio tridimensional (
La distancia más corta
El área en términos de
El área como producto cruzado:
Igualando estas dos expresiones y despejando
Este problema consiste en determinar si dos segmentos de línea,
En este caso, hay un número infinito de puntos de intersección. Por ejemplo, en la siguiente ilustración, todos los puntos entre
Para verificar esta situación:
En este caso, el punto de intersección es exactamente uno de los vértices de los segmentos. Por ejemplo:
Es fácil verificar este caso, ya que solo hay cuatro posibilidades:
En este caso, los segmentos se intersectan en exactamente un punto
Para determinar si los segmentos se intersectan:
Esto se puede hacer usando productos cruzados.
El teorema de Pick proporciona una manera de calcular el área de un polígono siempre que todos los vértices del polígono tengan coordenadas enteras. Según este teorema, el área del polígono se calcula como:
Donde:
Given:
a = (2, 3)
b = (4, 1)
a + b
,a - b
, Example: (2, 3) + (4, 1) = (2 + 4, 3 + 1) = (6, 4)
r * a
,r / a
, Example: If r = 3
, then 3 * (2, 3) = (3 * 2, 3 * 3) = (6, 9)
(conj(a) * b).x
, Example: (2 * 4 + 3 * 1) = 8 + 3 = 11
(conj(a) * b).y
, Example: (2 * 1 - 3 * 4) = 2 - 12 = -10
norm(a - b)
,Example: ((2 - 4)^2 + (3 - 1)^2) = (-2)^2 + (2)^2 = 4 + 4 = 8
abs(a - b)
, Example: sqrt((2 - 4)^2 + (3 - 1)^2) = sqrt(8) ≈ 2.83
arg(b - a)
, Example: atan2(1 - 3, 4 - 2) = atan2(-2, 2) = -π/4 ≈ -0.785 radians
(a, b)
: tan(arg(b - a))
, Example: Slope = (1 - 3) / (4 - 2) = -2 / 2 = -1
Given:
a = (2, 3)
, b = (4, 1)
, c = (4, 1)
, v = (4, 1)
p = (3, 2)
theta = π / 4
(45°)r = 5
(radius)Polar to cartesian: polar(r, theta)
Example: x = r * cos(theta) = 5 * cos(π / 4) ≈ 3.54
, y = r * sin(theta) = 5 * sin(π / 4) ≈ 3.54
, Result: (3.54, 3.54)
Cartesian to polar: point(abs(p), arg(p))
Example: r = sqrt(3^2 + 2^2) = sqrt(9 + 4) = sqrt(13) ≈ 3.61
, theta = atan2(2, 3) ≈ 0.588 radians
, Result: (3.61, 0.588)
Rotation about the origin: a * polar(1.0, theta)
Example: rotated = (2 * cos(π / 4) - 3 * sin(π / 4), 2 * sin(π / 4) + 3 * cos(π / 4)) = (2 * 0.707 - 3 * 0.707, 2 * 0.707 + 3 * 0.707)
, Result: (-0.707, 3.536)
Rotation about pivot p
: (a - p) * polar(1.0, theta) + p
Example: relative = (2 - 3, 3 - 2) = (-1, 1)
, rotated = (-1 * cos(π / 4) - 1 * sin(π / 4), -1 * sin(π / 4) + 1 * cos(π / 4)) = (-0.707 - 0.707, -0.707 + 0.707) = (-1.414, 0)
, final = (-1.414 + 3, 0 + 2) = (1.586, 2)
Angle ABC
: abs(remainder(arg(a - b) - arg(c - b), 2.0 * M_PI))
Example: arg(a - b) = atan2(3 - 2, 2 - 3) = atan2(1, -1) = π / 4
, arg(c - b) = atan2(1 - 2, 4 - 3) = atan2(-1, 1) = -π / 4
, angle = abs(remainder(π / 4 - (-π / 4), 2π)) = abs(π / 2)
, Result: π / 2 ≈ 1.57 radians
Project p
onto vector v
: v * dot(p, v) / norm(v)
Example:dot(p, v) = 3 * 4 + 2 * 1 = 12 + 2 = 14
norm(v) = 4^2 + 1^2 = 16 + 1 = 17
projection = (4, 1) * (14 / 17) ≈ (3.29, 0.82)
Project p
onto line (a, b)
: a + (b - a) * dot(p - a, b - a) / norm(b - a)
Example:
b - a = (4 - 2, 1 - 3) = (2, -2)
p - a = (3 - 2, 2 - 3) = (1, -1)
dot(p - a, b - a) = 1 * 2 + (-1) * (-2) = 2 + 2 = 4
norm(b - a) = 2^2 + (-2)^2 = 4 + 4 = 8
projection = (2, 3) + (2, -2) * (4 / 8) = (2, 3) + (1, -1) = (3, 2)
Reflect p
across line (a, b)
: a + conj((p - a) / (b - a)) * (b - a)
Example: a = (2, 3)
, b = (4, 1)
, p = (3, 2)
Result: (3, 2)
(reflection is identical because the point lies on the line)
Intersection of line (a, b)
and (p, q)
:
point intersection(point a, point b, point p, point q) {
double c1 = cross(p - a, b - a), c2 = cross(q - a, b - a);
return (c1 * q - c2 * p) / (c1 - c2); // undefined if parallel
}
5 minutos para resolver
La Verde es Euclideana y las demas Manhattan equivalentes