-
25-09-2019 - |
题
我看过 这个例子使用 php 和 GD 分段渲染具有小圆弧的螺旋。我想做的是渲染一个在数学上尽可能准确的螺旋近似值。
Inkscape 有一个 螺旋工具 看起来不错,但我想以编程方式进行螺旋生成(最好用Python)。
我还没有找到任何绘图库(例如Cairo)本身支持螺旋形状。如果想要渲染完美的抗锯齿螺旋,最好的方法是在画布上逐像素迭代,确定每个像素是否位于数学定义的螺旋臂区域(有限厚度)内?在这种情况下,还必须从头开始实现抗锯齿逻辑。您是否会对位于每个像素框内的曲线部分进行积分,然后将填充区域与空白区域的比率转换为 alpha 值?
在这种情况下,渲染质量比渲染时间更重要。然而,在我看来,评估每个像素的积分效率相当低。
更新: 我相信我应该问的问题是 这个 (雅虎问答已失败)。
解决方案
绘制曲线(样条线?)并生成大量控制点不是更容易吗?就像这样,您可以选择现有的抗锯齿引擎。
[编辑]:对此的第一个近似(使用 Tcl/Tk 完成,但代码应该很容易转换)给了我这个:
# Make the list of spiral coordinates
set coords {}
set theta 0; set r 10
set centerX 200; set centerY 150
# Go out 50 pixels per revolution
set pitch [expr {100.0 / 720.0}]
for {set i 0} {$i<720} {incr i} {
lappend coords [expr { $centerX + $r*sin($theta) }] \
[expr { $centerY + $r*cos($theta) }]
set r [expr { $r + $pitch }]
# Increment angle by one degree
set theta [expr { $theta + 3.1415927/180 }]
}
# Display as a spline
pack [canvas .c -width 400 -height 300]
.c create line $coords -tag spiral -smooth 1
我没有做出任何努力来有效地使用控制点。
其他提示
我还没有找到任何绘图库(例如Cairo)本身支持螺旋形状
不,这是一个非常不寻常的功能;直到最近,螺旋绘画才开始流行。
Inkscape 为此使用的代码是 斯皮罗. 。它主要是Python,并且可以使用Cairo来渲染螺旋近似的贝塞尔曲线。
然而,在我看来,评估每个像素的积分效率相当低。
确实是的。
不隶属于 StackOverflow