问题标签 [haskell-diagrams]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
270 浏览

haskell - Haskell 图:无需编译即可生成 SVG?

我尝试图表中的斐波那契演示, 但正如他们的许多示例所做的那样,它需要编译,然后该mainWith函数采用各种选项,包括 SVG 输出的文件名。我想从 GHCi 中获得与 .svg 输出文件相同的结果,而无需先编译。

虽然这个问答是关于同一个问题,但那里的解决方案使用似乎不再有效的 API 调用,例如SizeSpec2DmkSizeSpec

0 投票
1 回答
203 浏览

haskell - 哪些图表后端支持动画?

图表教程中出现以下文本:

一些后端支持渲染动画(通常作为单独索引的帧文件)。

所以从这里我开始制作一个小动画。我发现Diagrams.Animation并发现Animation类型是

从那里我看Data.Active,并且能够建立自己一点Animation

此时我试图编译,但被告知我Animation的不是Mainable。我想这一定意味着我的后端Diagrams.Backend.SVG.CmdLine不支持动画。所以我去看看其他一些后端,但我找不到任何一个Animations Mainable

本教程讨论的是什么后端?也就是说,哪些后端支持动画?

0 投票
1 回答
181 浏览

haskell - Haskell Diagrams Graphviz Gtk 显示对齐和缩放

我想在 Gtk 窗口中显示由graphviz(via ) 布置的图形。Data.GraphViz我拥有的代码不会自动使图表居中或调整图表大小。src/Main.hs我已经设置了一个带有示例的github 存储库(请参阅https://github.com/avras/diagrams-gtk-graphviz-example。我得到以下输出。

在此处输入图像描述

如果我尝试显示一个半径为 1 的圆,我会得到以下输出(这是预期的)。此示例的代码src/Circle.hs位于同一 github 存储库中。Main.hs并且Circle.hs仅在呈现的图表上有所不同(afact)。

在此处输入图像描述

如何使图形在窗口中居中并自动计算出正确的宽度?

mkWidth为了得到这张照片,我不得不玩弄这个论点。同样没有设置lw 0.005结果如下。线宽似乎很大。

在此处输入图像描述

编辑这是 Joachim Breitner 建议的修复后的结果。 在此处输入图像描述

0 投票
1 回答
238 浏览

haskell - Haskell 图中文本的自定义字体

我正在使用 Diagrams 库来生成一些带有自定义字体的文本。查看Text的文档,不清楚如何指定特定的 .ttf 字体文件?我尝试使用不同的 .ttf 文件,如下例所示,但没有人工作。

另一种选择似乎是SVGFonts,但我想在没有另一个库的情况下实现这一点。那么你们如何在图表中设置自定义字体?

UPD:我发现下面给出的答案非常具有解释性。为了解决这个问题,我实际上最终使用了SVGFonts,它增加了将 .ttf 转换为 .svg 的额外步骤,但确实可以完成这项工作。

0 投票
1 回答
165 浏览

haskell - 在 Haskell 图中加载外部图像

所以我有这个疑问。我已经有了可以处理本地(嵌入)图像文件的代码,但现在我需要加载一个外部图像。愚蠢的替换loadImageExt没有帮助:

查看loadImageExtreadImage的来源,我看不到它实际执行 http 内容以获取图像的位置。

文档说,loadImageExt,检查文件是否存在,并使用 JuicyPixels 确定正确的大小,但保存对图像的引用而不是光栅数据

所以请原谅我的无知,但这是否意味着我需要在这种情况下添加http加载逻辑?还是我只是错过了使这项工作发挥作用的一些要点?

UPD:我可能错了,有一些快速简便的方法可以通过放置链接来加载外部图像,但对我有用的是使用http-conduit,在 ByteString 中获取响应并解析它:

它甚至可以加载 https 图像,例如https://sneakernews.com/wp-content/uploads/2018/01/jordan-russell-westbrook-signature-shoe-creamsicle-3.jpg?w=1140

0 投票
1 回答
142 浏览

haskell - 图表和 gtk2hs

我一直在从事我的暑期研究项目,并且一直在使用 Diagrams 库来绘制带有边、节点的图形。我正在模拟整个图表中的信息传播,因此我的图表不断更新。我拥有用于​​更新图形状态数据结构、绘制图表等的所有基础设施。

出于测试目的,我一直在使用带有反馈循环的 SVG 后端getLine,更新图表,然后将其渲染到相同的“.svg”文件中。这显然是相当劣质的,并且依赖于我的 .svg 查看器在文件更新时更新的事实。

我已经研究过为此使用 GTK 后端,因此我可以将图表渲染到drawingAreaGTK 窗口中。我已经安装了所有这些,并且一直在搞乱一些小程序。

但是,我无法理解如何实现我的程序。我已经看过很多关于如何在 GTK 窗口中绘制图表的示例,但是它们似乎都没有包括基于按钮按下甚至命令行中的某些内容来更新该图像。

我听说过一些关于 GTK 的多线程。我正在考虑编写一个函数,例如:

更改画布暴露时呈现的图表,然后强制暴露事件。如果我然后运行更新图形的主程序执行,并renderDiagram在单独的线程上运行mainGUI,我会得到我想要的结果吗?有没有更清洁的方法来做到这一点?

如果有人能指出我正确的方向,或者提供一些外部阅读,那就太好了。谢谢。

0 投票
1 回答
101 浏览

haskell - 如何定义一个组合了几个原始后端的 Diagrams 后端

我想让同一个程序使用两个不同的Diagrams后端,特别是diagrams-rasterific从同一个图中生成 PNG,以及diagrams-svg生成 SVG。由于 Diagrams 似乎是围绕使用单个后端设计的,我试图定义一个组合后端,但在renderToTreeBackend实例定义时遇到了麻烦:

我不清楚如何在renderRTree这里遵循各个后端实现的功能。在任一替代结构中(将 Render 和 Result 类型作为总和或产品),我都无法使类型匹配。具体来说,在这种方法中,我被困在

但我不相信这甚至是要走的路。

toOptAtoOptB没问题,我可以在需要时填写。我也可以Renderable使用任何一种方法为此后端提供实例,例如

0 投票
2 回答
963 浏览

haskell - 光线追踪并在交点处找到表面的法线向量

使用 进行光线追踪时rayTraceP,我可以找到光线与图表相交的点。

我想用它不仅找到“碰撞点”,还找到碰撞时间和该点表面的法线向量。

给定射线的起点和沿射线的速度矢量,我可以end使用以下方法找到接触点rayTraceP

我可以使用 和 之间的距离找到碰撞start时间end

但我坚持寻找法线向量。我在这个函数中工作:

我想要它做的一些例子:

除了法线向量之外,这些示例中的所有内容都是正确的。

我查看了Diagrams.TraceDiagrams.Core.Trace的文档,但也许我找错了地方。

0 投票
1 回答
108 浏览

haskell - 如何使线像圆一样粗?

我想制作一条宽度等于圆直径的圆线。经过多次试验和错误,这似乎产生了想要的输出。

不过感觉不对。我希望lw 2对应,circle 1因为 2 是半径的两倍,但肯定不是lw 80?!
为什么它适用于 80?假设我错过了一些东西,如何制作一条像圆一样宽的圆线?

0 投票
1 回答
180 浏览

haskell - 修复箭头轴(图表库)

我使用and制作了一个数据存储符号。中间有红点的那个。B.differenceB.union

在此处输入图像描述

我已经尝试了几个小时,但无法Previous Estimate在那个符号和 Signal Decomposition (SSA). 目标是从符号右侧的中心开始绘制箭头。欢迎任何帮助。非常感谢。

编辑 1:添加了想要的结果。

在此处输入图像描述

这是完整的代码。