首页 > 解决方案 > 创建一个矩形 - 坐标 - 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) (-1, -1) (1, 1)

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

标签: haskellshape

解决方案


光栅化的矩形可以简单地表示为:存在于它们之间并满足以下任意数量的条件的
每个点: - - - - 列表理解是您想要的一个不错的开始。作为提示,这里的列表理解可以在and之间为您提供一个实心正方形:(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 。

祝你好运!


推荐阅读