问题标签 [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.
haskell - 哪些图表后端支持动画?
在图表教程中出现以下文本:
一些后端支持渲染动画(通常作为单独索引的帧文件)。
所以从这里我开始制作一个小动画。我发现Diagrams.Animation
并发现Animation
类型是
从那里我看Data.Active
,并且能够建立自己一点Animation
。
此时我试图编译,但被告知我Animation
的不是Mainable
。我想这一定意味着我的后端Diagrams.Backend.SVG.CmdLine
不支持动画。所以我去看看其他一些后端,但我找不到任何一个Animation
s Mainable
。
本教程讨论的是什么后端?也就是说,哪些后端支持动画?
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
结果如下。线宽似乎很大。
haskell - 在 Haskell 图中加载外部图像
所以我有这个疑问。我已经有了可以处理本地(嵌入)图像文件的代码,但现在我需要加载一个外部图像。愚蠢的替换loadImageExt
没有帮助:
查看loadImageExt和readImage的来源,我看不到它实际执行 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
haskell - 图表和 gtk2hs
我一直在从事我的暑期研究项目,并且一直在使用 Diagrams 库来绘制带有边、节点的图形。我正在模拟整个图表中的信息传播,因此我的图表不断更新。我拥有用于更新图形状态数据结构、绘制图表等的所有基础设施。
出于测试目的,我一直在使用带有反馈循环的 SVG 后端getLine
,更新图表,然后将其渲染到相同的“.svg”文件中。这显然是相当劣质的,并且依赖于我的 .svg 查看器在文件更新时更新的事实。
我已经研究过为此使用 GTK 后端,因此我可以将图表渲染到drawingArea
GTK 窗口中。我已经安装了所有这些,并且一直在搞乱一些小程序。
但是,我无法理解如何实现我的程序。我已经看过很多关于如何在 GTK 窗口中绘制图表的示例,但是它们似乎都没有包括基于按钮按下甚至命令行中的某些内容来更新该图像。
我听说过一些关于 GTK 的多线程。我正在考虑编写一个函数,例如:
更改画布暴露时呈现的图表,然后强制暴露事件。如果我然后运行更新图形的主程序执行,并renderDiagram
在单独的线程上运行mainGUI
,我会得到我想要的结果吗?有没有更清洁的方法来做到这一点?
如果有人能指出我正确的方向,或者提供一些外部阅读,那就太好了。谢谢。
haskell - 如何定义一个组合了几个原始后端的 Diagrams 后端
我想让同一个程序使用两个不同的Diagrams后端,特别是diagrams-rasterific从同一个图中生成 PNG,以及diagrams-svg生成 SVG。由于 Diagrams 似乎是围绕使用单个后端设计的,我试图定义一个组合后端,但在renderToTree
为Backend
实例定义时遇到了麻烦:
我不清楚如何在renderRTree
这里遵循各个后端实现的功能。在任一替代结构中(将 Render 和 Result 类型作为总和或产品),我都无法使类型匹配。具体来说,在这种方法中,我被困在
但我不相信这甚至是要走的路。
toOptA
,toOptB
没问题,我可以在需要时填写。我也可以Renderable
使用任何一种方法为此后端提供实例,例如
haskell - 光线追踪并在交点处找到表面的法线向量
使用 进行光线追踪时rayTraceP
,我可以找到光线与图表相交的点。
我想用它不仅找到“碰撞点”,还找到碰撞时间和该点表面的法线向量。
给定射线的起点和沿射线的速度矢量,我可以end
使用以下方法找到接触点rayTraceP
:
我可以使用 和 之间的距离找到碰撞start
时间end
:
但我坚持寻找法线向量。我在这个函数中工作:
我想要它做的一些例子:
除了法线向量之外,这些示例中的所有内容都是正确的。
我查看了Diagrams.Trace和Diagrams.Core.Trace的文档,但也许我找错了地方。
haskell - 如何使线像圆一样粗?
我想制作一条宽度等于圆直径的圆线。经过多次试验和错误,这似乎产生了想要的输出。
不过感觉不对。我希望lw 2
对应,circle 1
因为 2 是半径的两倍,但肯定不是lw 80
?!
为什么它适用于 80?假设我错过了一些东西,如何制作一条像圆一样宽的圆线?