半径为r的圆上的点p(x,y)与圆心o(x0,y0)的关系: x = x0+rcosa; y = y0+rsina ,a为弧度
样例:http://www.zhaojz.com.cn/demo/draw6.html
一、圆
复制代码 代码如下:
//圆形/椭圆
//dot 圆点
//r 半径
//compressionratio 垂直压缩比
function drawcircle(dot, r, compressionratio, data){
var pstart = [dot[0]+r, dot[1]]; //起点
var pre = pstart;
for(var i=0; i rad = i*math.pi/180; //计算弧度
//r*math.cos(rad) 弧线的终点相对dot的水平偏移
//r*math.sin(rad) 弧线的终点相对dot的垂直偏移
//compressionratio 垂直压缩比例
var cur = [r*math.cos(rad)+dot[0], compressionratio*r*math.sin(rad)+dot[1]];
drawline(pre,cur);
pre = cur; //保存当前点的坐标
}
drawline(pre,pstart);//使闭合
//描圆点
drawpoint({
pw:2,ph:2,color:'darkred',point:dot
});
}
二、弧
就在画出圆的一部分,算法与圆相似
复制代码 代码如下:
//画弧
//dot 圆点
//r 半径
//angle 圆心角
//angleofslope 与x轴的夹角
//pop 是否弹出
//title 标签
function drawarc(dot, r, angle, angleofslope, pop, title){
var newdot = [dot[0], dot[1]];
var a = (angleofslope+angle/2)*math.pi/180;
if(pop){ //计算圆心的新坐标
newdot[0] = dot[0]+10*math.cos(a);
newdot[1] = dot[1]+10*math.sin(a);
}
if(!angleofslope){
angleofslope = 0;
}
var aos = angleofslope*math.pi/180;
var aos2 = (angleofslope+angle)*math.pi/180;
var pstart = [newdot[0]+r*math.cos(aos), newdot[1]+r*math.sin(aos)]; //弧线的起点
var pend = [newdot[0]+r*math.cos(aos2), newdot[1]+r*math.sin(aos2)]; //弧线的终点
var pre = pstart;
for(var i=0; i rad = (i+angleofslope)*math.pi/180;
var cur = [r*math.cos(rad)+newdot[0], r*math.sin(rad)+newdot[1]];
drawline(pre,cur);
pre = cur;
}
}
三、扇形
将弧的两端与圆心相连
复制代码 代码如下:
//扇形
//dot 圆点
//r 半径
//angle 圆心角
//angleofslope 与x轴的夹角,确定扇形的方向
//pop 是否弹出,即是否偏离圆心
//title 标签
function drawsector(dot, r, angle, angleofslope, pop, title){
var newdot = [dot[0], dot[1]];
var a = (angleofslope+angle/2)*math.pi/180;
if(pop){ //计算圆心的新坐标
newdot[0] = dot[0]+10*math.cos(a);
newdot[1] = dot[1]+10*math.sin(a);
}
if(!angleofslope){
angleofslope = 0;
}
var aos = angleofslope*math.pi/180;
var aos2 = (angleofslope+angle)*math.pi/180;
var pstart = [newdot[0]+r*math.cos(aos), newdot[1]+r*math.sin(aos)]; //弧线的起点
var pend = [newdot[0]+r*math.cos(aos2), newdot[1]+r*math.sin(aos2)]; //弧线的终点
drawline(newdot,pstart); //连接圆心与起点
var pre = pstart;
for(var i=0; i rad = (i+angleofslope)*math.pi/180;
var cur = [r*math.cos(rad)+newdot[0], r*math.sin(rad)+newdot[1]];
drawline(pre,cur);
pre = cur;
}
drawpolyline([pre, pend, newdot]); //使闭合
//描圆心
drawpoint({
pw:2,ph:2,color:'darkred',point:dot
});
//标签
if(title){
document.write(+title+);
}
}
是不是很震撼,原来js也能做如此炫酷的事情。。。