Área orientada de un triángulo
Dados tres puntos , y , calcular un área orientada (con signo) de un triángulo formado por ellos. El signo del área se determina de la siguiente manera: imagínese que uno está de pie en el plano en el punto y mira hacia . Se va a y si queda a la derecha (entonces decimos que los tres vectores giran en sentido “horario”), el signo del área es negativo; en caso contrario es positivo. Si los tres puntos son colineales, el área es cero.
Usando esta área con signo, podemos tanto obtener el área usual sin signo (como el valor absoluto del área con signo) como determinar si los puntos yacen en sentido horario o antihorario en el orden especificado (lo cual es útil, por ejemplo, en algoritmos de envolvente convexa).
Cálculo
Podemos usar el hecho de que el determinante de una matriz es igual al área con signo de un paralelogramo generado por los vectores columna (o fila) de la matriz. Esto es análogo a la definición del producto cruz en 2D (véase Geometría básica). Al dividir esta área por dos obtenemos el área del triángulo que nos interesa. Usaremos y como vectores columna y calcularemos un determinante :
\right|=(x_2-x_1)(y_3-y_2)-(x_3-x_2)(y_2-y_1)
Implementación
int signed_area_parallelogram(point2d p1, point2d p2, point2d p3) {
return cross(p2 - p1, p3 - p2);
}
double triangle_area(point2d p1, point2d p2, point2d p3) {
return abs(signed_area_parallelogram(p1, p2, p3)) / 2.0;
}
bool clockwise(point2d p1, point2d p2, point2d p3) {
return signed_area_parallelogram(p1, p2, p3) < 0;
}
bool counter_clockwise(point2d p1, point2d p2, point2d p3) {
return signed_area_parallelogram(p1, p2, p3) > 0;
}