1

phpとGDを使用してこの例を見て、小さな弧を描いたスパイラルを区分的にレンダリングしました。私がやりたいのは、可能な限り数学的に正確なスパイラルの近似をレンダリングすることです。

Inkscapeにはかなり見栄えのするスパイラルツールがありますが、プログラムで(できればPythonで)スパイラル生成を行いたいと思います。

スパイラル形状をネイティブにサポートする描画ライブラリ(Cairoなど)は見つかりませんでした。完全なアンチエイリアススパイラルをレンダリングしたい場合、キャンバス上でピクセルごとに反復し、各ピクセルが数学的に定義されたスパイラルアーム領域(有限の厚さ)内にあるかどうかを判断するのが最善の方法ですか?その場合、アンチエイリアシングロジックを最初から実装する必要もあります。各ピクセルボックス内にある曲線の部分を統合してから、塗りつぶされた領域と空の領域の比率をアルファ値に変換しますか?

この場合、レンダリングの品質はレンダリング時間よりも重要です。ただし、各ピクセルで積分を評価すると、かなり非効率的だと思います。

更新:私が尋ねるべき質問はこれだと思います(Yahoo Answersは失敗しました)。

4

2 に答える 2

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 に答える
1

スパイラル形状をネイティブにサポートする描画ライブラリ(カイロなど)は見つかりませんでした

いいえ、これは非常に珍しい機能です。スパイラルで描くことが一般的になったのはごく最近のことです。

Inkscapeがこれに使用するコードはSpiroです。これは主にPythonであり、カイロを使用して、スパイラルが近似されるベジエをレンダリングできます。

ただし、各ピクセルで積分を評価すると、かなり非効率的だと思います。

はい、確かに。

于 2010-04-09T11:55:01.653 に答える