1

我已经看过这个例子,使用 php 和 GD分段渲染带有小弧的螺旋。我想做的是渲染一个在数学上尽可能准确的螺旋近似值。

Inkscape 有一个看起来不错的螺旋工具,但我想以编程方式进行螺旋生成(最好在 Python 中)。

我还没有找到任何原生支持螺旋形状的绘图库(例如 Cairo)。如果想要渲染一个完美的抗锯齿螺旋,最好的方法是在画布上逐个像素地迭代,确定每个像素是否位于数学定义的螺旋臂区域(有限厚度)内?在这种情况下,还必须从头开始实现抗锯齿逻辑。您是否会整合位于每个像素框内的曲线部分,然后将填充区域与空白区域的比率转换为 alpha 值?

在这种情况下,渲染的质量比渲染时间更重要。然而,评估每个像素的积分让我觉得效率很低。

更新:我相信我应该问的是这个问题(雅虎问答失败了)。

4

2 回答 2

1

我还没有找到任何原生支持螺旋形状的绘图库(例如 Cairo)

不,这是一个非常不寻常的功能。直到最近,螺旋线绘画才开始流行起来。

Inkscape 用于此的代码是Spiro。它主要是 Python,并且可以使用 Cairo 来渲染螺旋近似的贝塞尔曲线。

然而,评估每个像素的积分让我觉得效率很低。

确实是的。

于 2010-04-09T11:55:01.653 回答
1

绘制曲线(样条曲线?)并生成大量控制点不是更容易吗?就像你会拿起一个现有的抗锯齿引擎。

[编辑]:第一个近似值(使用 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

我没有做出任何努力来有效地使用控制点。

于 2010-04-09T10:35:38.037 回答