创建一个矩形 - 坐标 - Haskell

Creating a rectangle - Coordinates - Haskell

我正在尝试创建光栅图形。目前,我已经为一个矩形创建了代码,但是,该代码仅适用于 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)

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

一个栅格化的矩形可以简单地表示为:
(x1, y1)(x2,y2) 之间存在的每个点 (x', y') 满足以下任意数量的条件:
- 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

祝你好运!