haskell - 创建一个矩形 - 坐标 - 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
. 那么我怎么能使用递归或其他东西,所以当我输入一些点时,它会创建一个没有间隙的完整矩形。以下是点的打印内容:
解决方案
光栅化的矩形可以简单地表示为:存在于它们之间并满足以下任意数量的条件的
每个点:
-
-
-
-
列表理解是您想要的一个不错的开始。作为提示,这里的列表理解可以在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 。
祝你好运!
推荐阅读
- java - 移动模拟器 Selenium 测试在 Jenkins 中失败,但在 cmd 中失败
- ios - IOS 上的 PWA 和离线存储
- reactjs - 无法读取未定义的属性“组件”
- spring-boot - How to using annotation @RefreshScope with spingboot : connectionFactory?
- android - Custom Notification tray doesn't work for some phones
- bitcoin - 我如何在不使用任何 API 或第 3 方的情况下接收比特币付款
- qt - 如何根据第一个选定项目对齐图形场景中的图形项目?
- docker - 使用外部网络连接 docker 容器
- android - 如何更改导航抽屉中特定菜单项的背景颜色?
- angular - Angular - 使用 aG-Grid 导出模板 CSV 文件