Javascript 笛卡尔坐标中的饼图
下面是使用众所周知的公式在笛卡尔坐标系中生成“填充”圆(圆盘)的代码: (x-j)2+(y-k)2=r2 其中j&k是中心坐标,r是半径 它工作得很好,但现在我只想生成一个扇区,一个磁盘饼图,但仍然使用笛卡尔坐标。关于如何做到这一点有什么线索吗Javascript 笛卡尔坐标中的饼图,javascript,math,Javascript,Math,下面是使用众所周知的公式在笛卡尔坐标系中生成“填充”圆(圆盘)的代码: (x-j)2+(y-k)2=r2 其中j&k是中心坐标,r是半径 它工作得很好,但现在我只想生成一个扇区,一个磁盘饼图,但仍然使用笛卡尔坐标。关于如何做到这一点有什么线索吗 for(var scanx=x-radius; scanx<x+radius; scanx+=1) { // out of extend if(scanx<0 || scanx&
for(var scanx=x-radius; scanx<x+radius; scanx+=1) {
// out of extend
if(scanx<0 || scanx>params.width){
continue;
}
for(var scany=y-radius; scany<y+radius; scany+=1) {
if(scany<0 || scany>params.height) {
continue;
}
var dist = Math.sqrt(Math.pow((scanx-x), 2)+Math.pow((scany-y), 2));
if(dist > radius) {
continue;
} else {
var v = data - params.step * Math.pow(dist, degree);
var id = scanx+scany*params.width;
if(value[id]){
value[id] = Math.max(value[id], v);
} else {
value[id] = v;
}
}
}
}
对于(var scanx=x-radius;scanx您可以使用画布:
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(x, y, radius, startAngle, endAngle, anticlockwise);
ctx.lineTo(x, y);
ctx.closePath();
ctx.fill();
通过定义要输出的x轴和y轴的截面,可以绘制曲线的一段
因此,如果要打印圆的第一个象限,可以将循环的“x”限制在0
和x+半径之间,将循环的“y”限制在0
和y+半径之间
如果您正在根据起始角度θ1
和最终角度θ2
查找输出,则需要使用以下公式将其从极坐标转换为笛卡尔坐标:
x1 = r × cos( θ1 ); y1 = r × sin( θ1 );
x2 = r × cos( θ2 ); y2 = r × sin( θ2 );
然后使用值x1、x2作为循环边界的x,使用y1和y2作为循环边界的y
使用此方法的一个警告:
如果弧距大于45度,则需要将弧距从起点到最近的轴分成若干段,并获得最大坐标值。或者,您可以循环角度步长,并从上面的极笛卡尔坐标转换打印出x-y坐标。非主题:计算平方根很慢。最好计算半径*ra在循环之前DIU,并在每次迭代时将其与scanx*(scanx-2*x)+x*x+scany*(scany-2*y)+y*y
(=dist*dist
)进行比较。还要注意x*x
比Math.pow(x,2)快
,因为函数调用很慢。您可以随时询问wolfram alpha:此外,与其循环使用无用的值,不如将循环改进为(var scanx=Math.max(x-radius,0),直到lx=Math.min(x+radius,params.width);scanx