在f#中复制matlab样式的绘图命令

时间:2016-01-30 09:38:17

标签: f#

我有一个程序对2D数值数组执行一系列操作(例如,int [,]或float [,]),其中我的代码如下:

    let a3 = array |> f1 |> f2 |> f3

在Matlab或Octave中,我会编写如下代码:

    a1 = f1(array);
    a2 = f2(a1);
    a3 = f3(a2);

在开发过程中,我经常希望将中间值看作图像,如下所示:

    a1 = f1(array);
    figure;imshow(a1);
    a2 = f2(a1);
    figure;imshow(a2);
    a3 = f3(a2);

是否有一种简单的方法可以在F#中编写例程:

    val myplot: 'a [,] -> ()

此函数打开一个包含画布的窗口,我可以在其上绘制相应的数组,然后立即返回。鉴于这样的事情,我可以 写:

    let plotThrough (x: 'a [,]) =
      myplot x
      x

这将允许我的管道成为:

   let a3 = array |> f1 |> plotThrough |> f2 |> plotThrough |> f3

在这种情况下,会出现两个独立的窗口,一个包含我的f1结果图,另一个包含f2的结果。

我遇到的问题不是绘制到画布部分(这很容易 - 请求图形上下文,绘制它),但如何为每个绘图命令生成一个窗口,以便我可以获取图形上下文画进去。我有一个有限的测试工具,这是一个静态设计的表单GUI,有几个图像存在,给我图形上下文,但我宁愿不必设计一个表单,每次我想尝试不同的管道与不同我想看的地块数量。

注意:我对假设一个人正在使用fsi REPL的解决方案不感兴趣 - 我希望能够拥有一个可执行文件,在运行时,会为每个绘图弹出一组窗口,然后等待所有它们在终止之前就要关闭了。

0 个答案:

没有答案