CSDN上的网友 emu(ston) 提出的问题,还有他最后完成的 Pie 图,给我了一些启发,他的做法是用 PolyLine 画曲线,这样的方法确实可行,不过如果精度太底,曲线就不平滑了。我发现 path 里面的 ar 命令就是用来画弧线的。问题终于解决了。现在讲讲 ar 命令的使用。 ar left,top,right,bottom start(x,y) end(x,y) 共六个参数。前面四个参数分别是整圆的左上角和右下角坐标。这样就确定了弧的范围。后面两个参数是弧的开始坐标和结束坐标。在知道角度和半径的时候,最后两个参数是很好求的。下面的代码可以画一个扇形,sa,ea,用来确定起始角度和结束角度,注意,这里用角度,在函数里面我再把角度换算成弧度的。color 是颜色, n 是一些提示信息:
var r=2000; //半径 function createPie(sa,ea,color,n) { var fs=Math.PI*2*(sa/360); //角度转换成弧度 var fe=Math.PI*2*(ea/360); var sx=parseInt(r*Math.sin(fs)); var sy=parseInt(-r*Math.cos(fs)); //注意这里有个负号,因为VML的坐标第四像限相当于数学中的第一像限 var ex=parseInt(r*Math.sin(fe)); var ey=parseInt(-r*Math.cos(fe)); var strPie="<v:shape title='"+n+"' style='position:absolute;z-index:8;width:"+2*r+";height:"+2*r+"'" +" CoordSize='4000,4000' strokeweight='1pt' fillcolor='"+color+"'" +"path='m0,0 l "+sx+","+sy+" ar -2000,-2000,2000,2000,"+ex+","+ey+","+sx+","+sy+" l0,0 x e' />"; var newPie=document.createElement(strPie); group3.insertBefore(newPie); }