Ruby 如何绘制多段环空

Ruby 如何绘制多段环空,ruby,imagemagick,rmagick,Ruby,Imagemagick,Rmagick,我想画一个由许多部分组成的椭圆,例如: 目标是使用变量定义外径和内径以及管段数量,并让程序自动确定管段的大小和排列 在过去,我一直使用rmagick绘制由正方形组成的正方形,但我意识到,当需要考虑线段的内部和外部曲线时,它会变得更加复杂 我可以看到如何制作一个图像,并将其“复制/粘贴”到周围 我希望有另一个gem/库,我可以使用它,它有一些内置的循环方法 看起来我可以用RVG(ruby vector graphics)绘制它们。 我可以使用多边形方法,但这需要计算点的精确x/y坐标。 我也可以

我想画一个由许多部分组成的椭圆,例如:

目标是使用变量定义外径和内径以及管段数量,并让程序自动确定管段的大小和排列

在过去,我一直使用rmagick绘制由正方形组成的正方形,但我意识到,当需要考虑线段的内部和外部曲线时,它会变得更加复杂

我可以看到如何制作一个图像,并将其“复制/粘贴”到周围

我希望有另一个gem/库,我可以使用它,它有一些内置的循环方法

看起来我可以用RVG(ruby vector graphics)绘制它们。 我可以使用多边形方法,但这需要计算点的精确x/y坐标。 我也可以使用“路径”: 这将允许贝塞尔曲线和椭圆弧

这些方法中的任何一种似乎都需要大量的计算

我的想法是:

  • 计算一个内圆和一个外圆
  • 使用上面的点获得4个“角”
  • 这仍然需要考虑曲线边缘。如果我选择的值大于“角”,那么我可以画一个内圆和外圆来修剪它们

    然而,这似乎是在用棍子解决问题

    理想情况下,我还想继续学习更高级的绘图,例如:

    甚至


    是否有任何我可能忽略的库/gem或甚至是流程,可以使这更简单?

    不确定这是否符合要求,但可能值得一看:

    convert  -size 600x50  xc:black xc:yellow                    \
          \( -size 200x100 xc:lime xc:cyan xc:magenta +append \) \
             -size 600x25 xc:red -size 600x10 xc:blue -append result.png
    

    现在,通过更改最后一行,转到极地

    convert -size 600x50 xc:black xc:yellow                    \
        \( -size 200x100 xc:lime xc:cyan xc:magenta +append \) \
          -size 600x25 xc:red -size 600x10 xc:blue -append     \
          -background none -virtual-pixel none -distort polar 0 result.png
    

    或使用垫片:

    convert -size 600x50 xc:black xc:yellow xc:none[600x20\!] \( -size 180x100 xc:lime xc:none[20x100\!] xc:cyan xc:none[20x100\!] xc:magenta xc:none[20x100\!] +append \) xc:none[600x30\!] -size 600x25 xc:red -size 600x10 xc:blue -append -background none -virtual-pixel none -distort polar 0 result.png
    

    不确定这是否符合要求,但可能值得一看:

    convert  -size 600x50  xc:black xc:yellow                    \
          \( -size 200x100 xc:lime xc:cyan xc:magenta +append \) \
             -size 600x25 xc:red -size 600x10 xc:blue -append result.png
    

    现在,通过更改最后一行,转到极地

    convert -size 600x50 xc:black xc:yellow                    \
        \( -size 200x100 xc:lime xc:cyan xc:magenta +append \) \
          -size 600x25 xc:red -size 600x10 xc:blue -append     \
          -background none -virtual-pixel none -distort polar 0 result.png
    

    或使用垫片:

    convert -size 600x50 xc:black xc:yellow xc:none[600x20\!] \( -size 180x100 xc:lime xc:none[20x100\!] xc:cyan xc:none[20x100\!] xc:magenta xc:none[20x100\!] +append \) xc:none[600x30\!] -size 600x25 xc:red -size 600x10 xc:blue -append -background none -virtual-pixel none -distort polar 0 result.png
    

    它不是椭圆,而是椭圆。有了它,计算相应的坐标就不难了。你必须使用
    r*cos(alpha)
    r*sin(alpha)
    ,就是这样。这可能会让你感兴趣,它不是椭圆,而是椭圆。有了它,计算相应的坐标就不难了。您必须使用
    r*cos(alpha)
    r*sin(alpha)
    ,仅此而已。这可能会引起您的兴趣