2010-11-03 24 views
9

Si tengo a, b, c punto con x, y en forma de vectores que cómo puedo encontrar puntos colineales ..puntos colineales

fabs ((_) * (c b.x_-a.x. y_-a.y _) - (c.x_-a.x _) * (b.y_-a.y_) se usa así ... ¿cómo es esto?

+6

Habrá inestabilidades numéricas con ese enfoque, considere un proceso más robusto, por ejemplo, la distancia de C desde la línea (no segmento de línea) AB y esa distancia es menor que cierta tolerancia. –

Respuesta

6

Las diferencias le dan los vectores internos de un a b y a a C.

las multiplicaciones a continuación representan el producto vectorial entre estos dos vectores. el producto cruz es proporcional al seno del ángulo entre estos dos vectores. el seno entre estos dos vectores es cero cuando el p las manchas son colineales

Su fórmula particular es una contracción en 2d del producto en cruz más convencional en 3D. Ver: http://en.wikipedia.org/wiki/Cross_product

4

Se puede interpretar la fórmula como un producto vectorial (como se explica en winwaed 's respuesta), o se puede interpretar como sobre las laderas de los vectores b-a y c-a, como se explica en this answer.

2

fabs((b.x_-a.x_)*(c.y_-a.y_)-(c.x_-a.x_)*(b.y_-a.y_) es el producto cruzado.

en cuenta que:

fabs(crossProduct((b-a), (c-a))) == length(b-a)*distance of c from the line (a,b)

Por lo tanto es cero si y sólo si sólo cuando c encuentra en la línea (a, b), solo proporcionando a, b son distintos.

Me gustaría escuchar comentarios, o mejores ejemplos, sobre por qué esto podría ser "inestable". Siempre pensé que era bastante robusto.