在Ruby中绘制点和矩形
我正在寻找一种简单的方法来绘制大约10个点和矩形,以便能够看到我的算法哪里出了问题。我看过gnuplot,但是绘制矩形似乎特别糟糕。也许你可以试试SVG。易于创建(纯XML)、开放、跨平台,您可以使用Inkscape等打开和编辑在Ruby中绘制点和矩形,ruby,svg,plot,Ruby,Svg,Plot,我正在寻找一种简单的方法来绘制大约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