如何实现getPolygonGraphic函数:基于Point列表创建Polygon图形?
实现
getPolygonGraphic 函数的解决方案 嘿,这个问题其实挺直观的,我们先理清楚各个类型的关联逻辑,就能轻松写出实现啦。
首先先回顾你给出的类型定义:
data Shape = Rectangle Side Side | Ellipse Side Side | Polygon [Point] | Line Point Point deriving (Show) type Side = Double data ColourName = Magenta | Black | Green | Yellow | Orange | Cyan deriving (Show) data Graphic = Graphic Shape ColourName Point deriving (Show)
我们的目标是实现 getPolygonGraphic :: [Point] -> ColourName -> Graphic,拆解一下需求:
- 第一个参数是多边形的顶点列表
[Point],需要把它包装成Shape类型里的Polygon构造器实例 - 第二个参数是颜色
ColourName,直接传入Graphic构造器即可 Graphic构造器还需要第三个参数:一个Point(应该是图形的锚点/基准位置)。由于你的函数签名没接收这个参数,我们可以默认用原点(这里假设Point的定义是data Point = Point Double Double deriving (Show),如果是类型别名type Point = (Double, Double)就用(0,0))
基于这个逻辑,函数的基础实现如下:
-- 先假设 Point 的定义(如果你的 Point 定义不同,替换对应原点即可) data Point = Point Double Double deriving (Show) getPolygonGraphic :: [Point] -> ColourName -> Graphic getPolygonGraphic points colour = Graphic (Polygon points) colour (Point 0 0)
补充说明
- 如果你的
Point是类型别名(比如type Point = (Double, Double)),把原点改成(0,0)就行:getPolygonGraphic points colour = Graphic (Polygon points) colour (0,0) - 要是想支持自定义图形位置,可修改函数签名为
[Point] -> ColourName -> Point -> Graphic,灵活指定锚点:getPolygonGraphic :: [Point] -> ColourName -> Point -> Graphic getPolygonGraphic points colour pos = Graphic (Polygon points) colour pos - 实际场景中多边形至少需要3个顶点才有效,想加校验的话可以加守卫:
getPolygonGraphic points colour | length points >= 3 = Graphic (Polygon points) colour (Point 0 0) | otherwise = error "A polygon requires at least 3 points"
内容的提问来源于stack exchange,提问作者goat
相关产品推荐
相关产品推荐

