Colinealidad de una lista de puntos
Una colección de puntos son colineales si existe una línea recta tal que todos están en dicha línea. Por ejemplo, los puntos (2,1), (5,7), (4,5) y (20,37) son colineales porque pertenecen a la línea y = 2*x-3.
Definir la función
1 |
colineales :: [(Int,Int)] -> Bool |
tal que (colineales ps) se verifica si los puntos de la lista ps son colineales. Por ejemplo,
1 2 |
colineales [(2,1),(5,7),(4,5),(20,37)] == True colineales [(2,1),(5,7),(4,5),(21,37)] == False |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
-- 1ª definición colineales1 :: [(Int,Int)] -> Bool colineales1 ((x1,y1):(x2,y2):xys) = all (\(x,y) -> (x-x1)*dy == (y-y1)*dx) xys where (dx,dy) = (x2-x1,y2-y1) colineales1 _ = True -- 2ª definición colineales2 :: [(Int,Int)] -> Bool colineales2 ((x,y):xys) = all (\(dx',dy')-> dx'*dy == dy'*dx) ds where ((dx,dy):ds) = [(x'-x,y'-y) | (x',y') <- xys] -- 3ª definición colineales3 :: [(Int,Int)] -> Bool colineales3 ((x1,y1):(x2,y2):xys) = all (\(x,y) -> x*dy-y*dx == k) xys where (dx,dy,k) = (x2-x1,y2-y1,x1*dy-y1*dx) colineales3 _ = True |
3 Comentarios