Mingで円グラフ

Mingで円グラフを作成するサンプルです.といっても,ほとんど ActionScriptですが・・・.円の描画においては描画 メソッドで円を描くを参考にさせていただきました.

#!/usr/bin/perl -w
#
# make Pie Chart and Donut Chart
#
use strict;
use SWF qw(:ALL);

SWF::setScale(20.0);
SWF::setVersion(6);

my $m = new SWF::Movie();
$m->setBackground(0xff,0xff,0xff);
$m->setDimension(300, 200);
$m->setRate(30);

#---------------------------------------------------------------------------
# start actionscript
#---------------------------------------------------------------------------
my $strAction = <<'EOS';

_root.depth = 1;

_root.myMain = function()
{
  var aData  = new Array(219, 123, 70, 32, 55);
  var aColor = new Array(0x00de2b, 0xdc143c, 0x6a5acd, 0xff4500, 0x8b008b);
  drawPieChart("pie",  aData, aColor, 70, 100, 60, 0);

  var aData2  = new Array(40, 15, 45);
  var aColor2 = new Array(0x0000ff, 0x666666, 0xff00000);
  drawPieChart("donut", aData2, aColor2, 225, 100, 60, 0.5);
};


function drawPieChart(objName, aData, aColor, nX, nY, nR, nDonut)
{
    var nTotal = 0;
    for ( var i=0; i=0; --i) {
      xDrawSectorClockwise(target_mc, i*nAngle, nAngle,
			   nX, nY, nDonut*nR, 0);
    }
  } else {
    target_mc.lineTo(0, 0);
  }
};


function xDrawSectorClockwise(target_mc, nTheta, nAngle, nX, nY, nR,
			      isClockWise)
{
    var cw = isClockWise ? 1 : -1;
    var nAnchorX = nR*Math.cos(nTheta);
    var nAnchorY = nR*Math.sin(nTheta);
    var nControlX = 
        nAnchorX+nR*Math.tan(cw*nAngle/2)*Math.cos(nTheta-Math.PI/2);
    var nControlY = 
        nAnchorY+nR*Math.tan(cw*nAngle/2)*Math.sin(nTheta-Math.PI/2);
    target_mc.curveTo(nControlX+nX, nControlY+nY, nAnchorX+nX, nAnchorY+nY);
};


// main  
_root.myMain();

EOS

$m->add(new SWF::Action($strAction));
$m->nextFrame();
$m->save("piechart.swf",9);


Up(P): Home

間違え,勘違い,スペルミスなどは mail まで

Last modified: Sat Feb 4 23:27:18 JST 2006