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
colineales :: [(Int,Int)] -> Bool |
tal que (colineales ps) se verifica si los puntos de la lista ps son colineales. Por ejemplo,
colineales [(2,1),(5,7),(4,5),(20,37)] == True colineales [(2,1),(5,7),(4,5),(21,37)] == False |
Soluciones
-- 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 soluciones de “Colinealidad de una lista de puntos”