ruby - 使用 ruby​​_gnuplot 在 Ruby 中制作动画 3d 散点图

是否可以使用 gnuplot gem 在 Ruby 中创建动画 3 维散点图?

我已经查看了 gem 源代码、一堆示例和 gnuplot 手册,但还没有弄清楚该怎么做。

我想我必须将它 fork 并添加一些 do-loop 功能 - 但在我这样做之前,我想知道是否有好的方法。

这是我的代码的摘录,显示了我目前所拥有的内容。

Gnuplot.open do |gp|
  Gnuplot::SPlot.new( gp ) do |plot|
    plot.title 'Orbital Simulation'

    N.times do | i |
      objects.each { | key, object | object.calc_tick(objects.except key) }
      objects.each { | key, object | object.apply_tick }

      x = []
      y = []
      z = []

      objects.each do | key, object |
        x << object.get_x
        y << object.get_y
        z << object.get_z
      end

      plot.data << Gnuplot::DataSet.new( [x, y, z] ) do |ds|
        ds.with = "points"
        ds.notitle
      end
    end
  end
end

最佳答案

方法调用 Gnuplot::Splot.new(gp) {...} 将给定 block 中定义的命令(包括 splot 命令和内联数据)发送到 IO 对象 GP。因此,在循环中依次调用Gnuplot::Splot.new,并在它们之后插入一些等待行为(休眠)。

例如,以下代码生成动画 3d 散点图(实际上只包含一个点)。

require "gnuplot"

Gnuplot.open do |gp|

  1000.times do |k| ### loop
    Gnuplot::SPlot.new( gp ) do |plot|
      plot.title 'Orbital Simulation'
      plot.xrange "[-2:2]"
      plot.yrange "[-2:2]"
      plot.zrange "[-2:2]"
      x = [Math.sin(k*0.05)]
      y = [Math.cos(k*0.05)]
      z = [Math.sin(k*0.07)]
      plot.data << Gnuplot::DataSet.new( [x, y, z] ) do |ds|
        ds.with = "points ps 2 pt 7"
        ds.notitle
      end
    end
    gp << "\n" ### this is needed to separate line after inline data
    gp.flush   ### flushing popen buffer
    sleep 0.1  ### waiting 
  end
end

https://stackoverflow.com/questions/17508051/

相关文章:

ruby-on-rails - 如何在 Fabrication 的计数参数中使用 transient

Android - 将大量数据传递给在不同进程上运行的服务

objective-c - 当模拟器从 XCode 关闭时,是否有运行的方法?

jdbc - 配置单元 jdbc 连接发出内存不足错误

solr - 使用 OR 的嵌套功能范围查询

python - 在python中使用smtp发送电子邮件不起作用

ruby-on-rails - Rails - has_secure_password 密码和 PI

git - 通过 ANT 克隆 GIT 存储库

python - 用于 gtk 应用程序的交互式 python 控制台

php - 无法使用多语言 codeigniter 摆脱 URL 中的默认 Controller