渲染抗锯齿螺旋

时间:2010-04-09 10:17:16

标签: graphics bezier antialiasing spiral

我看了this example using php and GD分段渲染一个小弧形的螺旋线。我想做的是渲染一个尽可能在数学上准确的螺旋近似。

Inkscape有spiral tool看起来很不错,但我想以编程方式进行螺旋生成(最好是用Python)。

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

在这种情况下,渲染质量比渲染时间更重要。但是,评估每个像素的积分对我来说效率非常低。

更新:我相信我应该问的问题是this one(Yahoo Answers失败了)。

2 个答案:

答案 0 :(得分: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

我没有努力提高控制点的使用效率。

答案 1 :(得分:1)

  

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

不,这是一个非常不寻常的功能;直到最近,用螺旋线绘画才变得流行。

Inkscape使用的代码是Spiro。它主要是Python,可以使用Cairo渲染螺旋线近似的beziers。

  

然而,评估每个像素的积分对我来说效率很低。

是的,确实。