You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:22:12