Otra pregunta de puntos colineales. El giro de esta es, estoy usando la aritmética de enteros, y estoy buscando exacta collinearity, no es una prueba fuzzy basada en epsilon.Cómo determinar si 3 puntos son exactamente colineales en Z^2
Con ensamblado en línea, puedo conseguir una respuesta exacta: la instrucción x86 multiplican da acceso tanto a las partes alta y baja del producto, los cuales son importantes para calcular el producto vectorial (X - Un) x (B - A); Puedo simplemente O las dos mitades juntas y probar cero. Pero espero que hay una manera de hacerlo en C, que es:
- desbordamiento a prueba de
- portátil
- elegante
más o menos en ese orden. Y, al mismo tiempo, una forma de hacerlo que es/no:
- incluyen fundición a
double
- implicar el uso de un mayor tipo entero - supongo que ya estoy usando el mayor tipo entero disponible para mi componente de coordenadas tipo
- produce falsos positivos o falsos negativos.
No estoy preocupado por esta cuestión acerca de si X es más allá del segmento AB ; eso es solo cuatro comparaciones poco interesantes.
Mi situación de pesadilla es que tendré que dividir cada componente de coordenadas en dos mitades, y hacer una multiplicación larga explícitamente, solo para poder seguir todas las mitades altas en los productos parciales. (Y luego tener que hacer complemento con-llevar de forma explícita.)
¿El producto cruzado se generaliza a n dimensiones? –
Su título menciona Z^n, pero el texto de su pregunta menciona el producto cruzado, que creo que solo se define cuando n = 3 (o n = 2, tratándolo como n = 3 con z = 0). ¿Podría aclarar si está buscando una solución general o solo una n = 3? Pregunto porque, aunque un enfoque n = 2 o n = 3 se puede generalizar fácilmente a dimensiones arbitrarias (verificando la colinealidad a lo largo de la superposición de subconjuntos de dimensiones de dos o tres elementos), podría ser menos elegante. – ruakh
@OliCharlesworth - [Sí, pero es una operación ('n-1') -ary] (http://en.wikipedia.org/wiki/Cross_product#Multilinear_algebra). –