1

ImageMagickで円グラフをパーセンテージで描くにはどうすればよいですか?

例:パーセンテージとして45のような値が指定されている場合、Rubyまたはbashコマンドを使用して45%の円グラフを描画するにはどうすればよいですか?

ImageMagickのdraw演算子を使用する場合、アーク値をどのように設定する必要がありますか?または、整数値からacr値を計算するにはどうすればよいですか?

例えば:

convert -size 100x100 xc:none -fill white -stroke black/
-draw "path 'M 30,40   A 1,1  0  0,0 70,20 ....  ??

例を読んで理解しようとしましたが、アーク計算は謎です。

4

1 に答える 1

8

ImageMagick の操作は、この W3C ドキュメントdrawで定義されている SVG の「パス」を実装します。

単純な「度」角度パラメータを指定して描画することはサポートされていません。三角関数を使用して、円弧を含む各パスおよびサブパスの終点座標を計算する必要があります。(使用している正確な円弧演算子に応じて、現在の点に対して絶対値または相対値のいずれかを使用する必要があります。以下の例も参照してください。)

全般的

SVG (および ImageMagick) では、「パス」はオブジェクトの輪郭を表します。複合パスの描画もサポートされています。複合パスはサブパスを持つパスであり、各サブパスは単一のパスとそれにmoveto続く 1 つ以上のlineorcurve操作で構成されます。

オブジェクトのアウトラインは、次の操作で定義できます。

  • moveto : 新しい現在のポイントを設定します。絶対移動と相対移動に
    使用します。Mm

  • lineto : 直線を引く。絶対移動と相対移動に
    使用します。Ll

  • curveto : ベジエ曲線を描きます。、、およびを
    使用して、 3 次ベジエ曲線を描画します。(円グラフにはこれらは必要ありません)。、、を 使用して*二次ベジエ曲線を描画します。(円グラフにはこれらは必要ありません)。CcSs
    QqTt

  • arc : 楕円または円弧を描きます。
    と を使用Aして楕円弧aを描きます。ellipse == circleという特殊なケースの円グラフにこれらが必要です。

  • closepath : 最後の moveto まで線を引いて現在の形状を閉じます。Zまたはz; を使用します。どちらも同じ効果があります。現在のサブパスを終了し、現在のポイントから現在のサブパスの最初のポイントまで自動直線が引かれます。

    • 「closepath」の直後に「moveto」が続く場合、「moveto」は次のサブパスの開始点を識別します。
    • 「closepath」の直後に他のコマンドが続く場合、次のサブパスは現在のサブパスと同じ開始点から始まります。

単一の円グラフ ウェッジの例

つまり、次のコマンドを使用して、黄色の背景を使用して、280x280 キャンバス内に黒い境界線を持つ単一の赤い円グラフ ウェッジを描画できます。

convert         \
  -size 280x280 xc:yellow \
  -stroke black \
  -fill blue    \
  -draw "path 'M 120,140  L 120,40  A 100,100 0 0,1 137.36,41.52  Z'" \
   red-pie-wedge.jpg

結果:
赤い円グラフのくさび

  1. 次の座標系の原点は左上隅です。
  2. パスの始点 ( M) は、ピクセル座標(120/140)にあります。
  3. 最初の線 ( L) は、そこから座標(120/40)まで垂直に上向きに描画されます。
  4. 座標(120/40)Aから、半径100の円弧 ( ) が座標(137.36/41.52)に移動します。円弧の終点としてcoord (137.36/41.52)
    につながる三角法の計算を行うことは、読者に任せます。ヒント:
    • くさびの角度は 10° で、この例では半径が100であるため100*sin(10°)=17.36であり、したがって120+17.36=137.36です。
    • cos(10°)=0.9848および100*(1-cos(10°))=1.52、したがって40+1.52=41.52 .
  5. 円弧の終点から、パスは閉じられ ( Z)、パスの始点に戻る直線になります。

完全な円グラフの例

すべての扇形を描画するために必要な円弧の終点を計算するには、常に三角関数の計算を行う必要があります。

以下は、上記の青い扇形を含む完全な円グラフの例です。

convert                  \
 -size 280x280 xc:yellow \
 -stroke black           \
 -fill blue   -draw "path 'M 120,140  L 120.00,40.00  A 100,100  0 0,1  137.36,41.52  Z'" \
 -fill silver -draw "path 'M 120,140  L 137.36,41.52  A 100,100  0 0,1  154.20,46.00  Z'" \
 -fill red    -draw "path 'M 136,130  L 170.20,36.00  A 100,100  0 0,1  236.00,130.00 Z'" \
 -fill green  -draw "path 'M 120,140  L 220.00,140.00 A 100,100  0 1,1  120.00,40.00  Z'" \
 -fill black  -stroke none  -pointsize 10 \
 -draw "text 119,37 '10' text 142,41 '10' text 182,36 '70' text 226,156 '270'" \
  piechart.jpg

結果:
完全な円グラフ

于 2012-10-16T12:31:57.000 に答える