2010-04-09 171 views
1

我已經看過this example using php and GD以分段渲染具有小圓弧的螺旋。我想要做的是渲染一個近似於儘可能數學精確的螺旋。呈現抗鋸齒螺旋

Inkscape有一個spiral tool,看起來不錯,但我想以編程方式做螺旋生成(最好在Python中)。

我還沒有找到任何原生支持螺旋形狀的繪圖庫(例如開羅)。如果想渲染一個完美的反鋸齒螺旋,最好的方法是在畫布上逐像素地迭代,確定每個像素是否位於數學定義的螺旋臂區域(有限厚度)內?在這種情況下,人們也必須從頭開始實施反鋸齒邏輯。你會整合每個像素框內的曲線部分,然後將填充空白區域的比率轉換爲alpha值嗎?

在這種情況下,渲染質量比渲染時間更重要。然而,評估每個像素的積分讓我覺得效率很低。

更新:我相信我應該問的問題是this one(雅虎答案失敗了)。

回答

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 

我還沒有作出任何努力來提高效率在我使用控制點。

+0

@kostmo:嘗試更新的答案。您可能需要進行調整,因爲我不確定要實施哪種語言,但點計算仍保持不變。數學畢竟是數學...... – 2010-04-09 20:38:46

1

我還沒有發現任何圖形庫(例如開羅)在本地支持螺旋狀

不,這是一個相當不尋常的特徵;直到最近,螺旋圖才成爲流行。

Inkscape用於此的代碼是Spiro。它主要是Python,並且可以使用Cairo渲染螺旋近似的貝塞爾曲線。

但是,評估每個像素的積分讓我覺得效率很低。

是的的確的。

+0

我將代碼下載到了Spiro,它似乎在C中。但是,bezier方法聽起來像是正確的方式,我可以從PyCairo做到這一點。 – kostmo 2010-04-09 13:56:00