Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中绘制点和矩形_Ruby_Svg_Plot - Fatal编程技术网

在Ruby中绘制点和矩形

在Ruby中绘制点和矩形,ruby,svg,plot,Ruby,Svg,Plot,我正在寻找一种简单的方法来绘制大约10个点和矩形,以便能够看到我的算法哪里出了问题。我看过gnuplot,但是绘制矩形似乎特别糟糕。也许你可以试试SVG。易于创建(纯XML)、开放、跨平台,您可以使用Inkscape等打开和编辑 SVG()是一种非常简单的基于文本(XML)的格式,使用Ruby可以轻松发布,而无需任何SVG库和任何现代web浏览器中的视图。这里有一个例子: 通过字符串插值的SVG点 将输出另存为“foo.svg”,并在现代web浏览器中打开以查看 绘制矩形 要绘制矩形

我正在寻找一种简单的方法来绘制大约10个点和矩形,以便能够看到我的算法哪里出了问题。我看过gnuplot,但是绘制矩形似乎特别糟糕。

也许你可以试试SVG。易于创建(纯XML)、开放、跨平台,您可以使用Inkscape等打开和编辑

SVG()是一种非常简单的基于文本(XML)的格式,使用Ruby可以轻松发布,而无需任何SVG库和任何现代web浏览器中的视图。这里有一个例子:

通过字符串插值的SVG点 将输出另存为“foo.svg”,并在现代web浏览器中打开以查看


绘制矩形 要绘制矩形,可以使用以下任意一种方法:


如果要连接未与轴对齐的任意点而不必担心变换,则多边形可能是最容易生成的。请注意,虽然为了清晰起见,我已经以
x,yx,y
的格式显示了上面的坐标,但SVG也将接受
x,y,x,y
xyxy
,如果这些坐标更容易生成代码的话


一点格式 如果要绘制轮廓而不是填充形状,可以在SVG中添加以下CSS:


矩形,多边形,路径{填充:无;笔划:黑色;笔划宽度:1px}

对XML使用Haml

最后,HAML是另一个选择,您可以考虑在没有SVG特定库的情况下制作XML:

@points = (0..7).map{ [rand(100)-50,rand(100)-50] }

require 'haml'
puts Haml::Engine.new(<<ENDHAML).render(self)
%svg(xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 200 200")
  :css
    circle { fill:orange }
    rect, polygon, path {
      fill:none; stroke:black;
      vector-effect:non-scaling-stroke
    }
  - @points.each_slice(4) do |rect|
    %polygon{ points:rect.join(" ") }
  - @points.each do |x,y|
    %circle{r:3, cx:x, cy:y}
ENDHAML
@points=(0..7).map{[rand(100)-50,rand(100)-50]}
需要“haml”

puts Haml::Engine.new(+1表示建议使用SVG,但-1表示使用W3Schools链接:p:D我认为整个“W3Schools is evil”的故事有点夸张。您可以自由提交另一个首选SVG教程链接。:pOr,更好的是,在您的答案中提供一个优秀的SVG教程……)。谢谢!哇,这是一个很好的答案!分享这么多信息的荣誉;-)
require 'nokogiri' # gem install nokogiri
b = Nokogiri::XML::Builder.new do |doc|
  doc.svg xmlns:"http://www.w3.org/2000/svg", viewBox:"-100 -100 200 200" do
    points.each do |x,y|
      doc.circle r:3, cx:x, cy:y
    end
  end
end
puts b.to_xml
@points = (0..7).map{ [rand(100)-50,rand(100)-50] }

require 'haml'
puts Haml::Engine.new(<<ENDHAML).render(self)
%svg(xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 200 200")
  :css
    circle { fill:orange }
    rect, polygon, path {
      fill:none; stroke:black;
      vector-effect:non-scaling-stroke
    }
  - @points.each_slice(4) do |rect|
    %polygon{ points:rect.join(" ") }
  - @points.each do |x,y|
    %circle{r:3, cx:x, cy:y}
ENDHAML