创建一个矩形 - 坐标 - Haskell

时间:2018-05-02 11:17:32

标签: haskell shape

我正在尝试创建一个光栅图形。目前,我已经为矩形创建了代码,但是,代码仅适用于3x3矩形。我不知道如何改进代码,因此它适用于4x4,5x5等。这就是我所拥有的:

rectangleRaster :: Coord -> Coord -> Raster
rectangleRaster (x1, y1) (x2, y2) = [((x1, y1), 1.0), ((x1, y1 + y2), 1.0)] ++ [((x1, y2), 1.0), ((x1 + x2, y1), 1.0)] ++ [((x2 + x1, y2), 1.0), ((x2, y1), 1.0)] ++ [((x2, y2 + y1), 1.0), ((x2, y2), 1.0)]

我看到问题是每次我想要一个更大的矩形我需要向rectangleRaster添加更多的点。那么我怎么能使用递归或其他东西所以当我输入一些点时它会创建一个没有间隙的完整矩形。这是点的印刷品:

点数:( - 1,-1)(1,1) (-1, -1) (1, 1)

点数:(-2,1)(2,-1) (-2, 1) (2, -1)

1 个答案:

答案 0 :(得分:2)

栅格化矩形可以简单表示为:
 (x', y')(x1, y1)之间存在的满足以下任意条件的每个点(x2,y2)
  - x == x1
  - x == x2
  - y == y1
  - y == y2
列表理解是你想要的一个不错的开始。作为提示,这里的列表理解能够为您提供(x1, y1)(x2, y2)之间的填充方格:

pointList = [(x', y') | x' <- [x1..x2], y' <- [y1..y2]]

从那里开始,通过找到如何指定哪些点应该进入列表来进一步努力。您可以阅读列表理解,例如:https://wiki.haskell.org/List_comprehension

祝你好运!