gpt4 book ai didi

ruby - 在 Ruby 中绘制点和矩形

转载 作者:数据小太阳 更新时间:2023-10-29 06:55:53 25 4
gpt4 key购买 nike

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

最佳答案

SVG ( MDN Tutorial ) 是一种非常简单的基于文本 (XML) 的格式,您可以使用 Ruby 轻松生成它,而无需任何 SVG 库,并可以在任何现代 Web 浏览器中查看。这是一个示例:

通过字符串插值的 SVG 点

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

puts <<ENDSVG
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-100 -100 200 200">
#{points.map{ |x,y| "<circle cx='#{x}' cy='#{y}' r='3' />" }.join("\n")}
</svg>
ENDSVG

输出:http://jsfiddle.net/xwnVY/


如果你想比字符串插值更结构化:

使用 Nokogiri XML 生成器的 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

将输出保存为“foo.svg”并在现代网络浏览器中打开以查看。


绘制矩形

要绘制矩形,您可以使用以下任何一种:

<rect transform="rotate(45)" x="0" y="0" width="100" height="200" />
<polygon points="0,0 100,0 100,100 0,100" />
<path d="M0,0 L100,0 100,100 0,100 Z" />

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


一些格式化

如果你想绘制轮廓而不是填充形状,你可以在你的 SVG 中添加这个 CSS:

<style>
rect, polygon, path { fill:none; stroke:black; stroke-width:1px }
</style>

为 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

输出:http://jsfiddle.net/xwnVY/4/

关于ruby - 在 Ruby 中绘制点和矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com