我对haskell有疑问,因为我需要计算多边形大小的大小,基本上是给定线条的某些点的线条大小。
我来到这里:type Points = (Float, Float) -- (x,y)
type Rectangle = (Points,Float,Float) -- (Top left corner., width,height)
type Triangulo = (Points,Points,Points)
type Poligonal = [Points]
distance :: Points -> Points -> Float
distance (a,b) (c,d) = sqrt (((c-a)^2) + ((b-d)^2))
poli :: Poligonal -> Float
poli [] = 0
poli ((a,b):(c,d):ys)= distance (a,b) (c,d) + poli ys
这样做,它会计算由点/点定义的所有线条的大小,但从不计算最终位置:
poli [(0.0,0.0),(1.1,1.0),(20.0,12.0)]
1.4866068
poli [(0.0,0.0),(1.1,1.0),(20.0,12.0),(2.0,3.0)]
21.611217
...
需要2分来给出线条大小
1 --------- 2 ---------- 3
它计算1-2,但不是2-3
我正在学习哈斯克尔,所以我希望你能指出我正确的方向。
为所有人欢呼
答案 0 :(得分:1)
定义poli
的另一种方法是:
poli :: Poligonal -> Float
poli [] = 0
poli (x:xs) = sum $ zipWith distance (x:xs) xs
我们使用zipWith
将列表中的每个元素(除了最后一个)与其下一个元素配对,然后返回距离列表。然后我们对列表求和。
答案 1 :(得分:0)
这就是诀窍。
poli :: Poligonal -> Float
poli [] = 0
poli ((a,b):[]) = 0
poli ((a,b):(c,d):ys)= distance (a,b) (c,d) + poli ((c,d):ys)