0

我有一个具有绝对 x 和 y 坐标的点列表:

points :: [(1,1), (2,2), (3,3), (-105, -42.42)]

以及作为点元组的边列表:

edges :: [((1,1), (2,2)), ((1,1),(-105, -42.42)), ((3,3), (-105, -42.42))]

我现在想使用diagrams包来绘制它,使用圆圈作为节点,使用线条作为边缘。我找到了Located应该提供此功能的类型。另一方面,有atPoints功能,但是它们似乎没有实现相同的功能(atPoints仅移动本地原点)。

实现这一目标的惯用方式是什么?如何使用Located类型?

4

1 回答 1

2

您可以使用moveTo某些对象移动到绝对指定的位置。要在绝对定义的顶点之间绘制边,您可以使用fromVertices. 请注意,两者都不接受元组作为参数而是点- 但转换为这些很容易。

> :m +Diagrams.Prelude Graphics.Dynamic.Plot.R2
> plotWindow $ (shapePlot <$> [circle 1 & moveTo (p2 p) | p<-points]
                           ++ [fromVertices [p2 p, p2 q] | (p,q)<-edges]) 
            ++ [dynamicAxes]

带有动态轴的自动着色视图

要将这些元素组合成一个图表,您可以只使用 monoid 实例,即mconcat列表。

plotWindow [shapePlot . mconcat $ [circle 1 & fcA transparent & moveTo (p2 p) | p<-points] ++ [fromVertices [p2 p, p2 q] | (p,q)<-edges]]

平面组合视图

于 2016-02-15T18:55:44.320 回答