Javascript 将二次切片拆分为3个较小的切片HTML5画布JS
我有一条二次曲线,我用它来创建一个饼图的切片。切片位于x轴和y轴上,中心点位于(0,0)。半径在半径X和半径Y处是可变的。这个切片移动90度 我需要将这个切片分成3个独立的切片(每个切片都有30度的角度),并让它们匹配父切片的任何曲线 下图显示了切片的可能示例。黑色圆圈调整切片的大小/形状: 以下是我创建的函数,但它无法正常工作:Javascript 将二次切片拆分为3个较小的切片HTML5画布JS,javascript,html,canvas,split,quadratic,Javascript,Html,Canvas,Split,Quadratic,我有一条二次曲线,我用它来创建一个饼图的切片。切片位于x轴和y轴上,中心点位于(0,0)。半径在半径X和半径Y处是可变的。这个切片移动90度 我需要将这个切片分成3个独立的切片(每个切片都有30度的角度),并让它们匹配父切片的任何曲线 下图显示了切片的可能示例。黑色圆圈调整切片的大小/形状: 以下是我创建的函数,但它无法正常工作: //globalPosX and globalPosY equal whatever position each of the two large black c
//globalPosX and globalPosY equal whatever position each of the two large black circles have repectively.
var canvas = document.getElementById('CV_slices');
var context = canvas.getContext('2d');
var cenX = canvas.width/2;
var cenY = canvas.height/2;
var blackDotX = globalPosX - cenX;
var blackDotY = cenY - globalPosY;
var endX;
var endY;
var controlX;
var controlY;
//set first slice
var startCoOrds = {
x: cenX ,
y: globalPosY
};
for (i=1; i < 4; i++) {
//make end(x,y) of previous slice the start(x,y) for the next slice.
endX = startCoOrds.x - (blackDotX*Math.sin(30));
endY = startCoOrds.y + (blackDotY*Math.cos(30));
//set position of control point using position of start/end positions (at the moment only adjustibng using +10 -10 at end)
controlX = ((endX - startCoOrds.x) /2) + (startCoOrds.x) + 10;
controlY = ((endY - startCoOrds.y) / 2) + (startCoOrds.y) - 10;
// draw slice
context.save();
context.beginPath();
context.moveTo(cenX, cenY);
context.lineTo(startCoOrds.x, startCoOrds.y);
context.quadraticCurveTo(controlX, controlY, endX, endY);
context.lineTo(cenX, cenY);
//make end(x,y) of previous slice the start(x,y) for the next slice
startCoOrds.x = endX;
startCoOrds.y = endY;
context.closePath();
context.globalAlpha = 0.1;
context.fillStyle = "#333333";
context.fill();
context.lineWidth = 2;
context.strokeStyle = "#ffffff";
context.stroke();
context.restore();
}
//globalPosX和globalPosY分别等于两个大黑色圆圈各自的位置。
var canvas=document.getElementById('CV_切片');
var context=canvas.getContext('2d');
var cenX=canvas.width/2;
var cenY=canvas.height/2;
var blackDotX=globalPosX-cenX;
var blackDotY=cenY-globalPosY;
var-endX;
var endY;
var-controlX;
风险控制;
//第一片
var startCoOrds={
x:cenX,
y:全球视野
};
对于(i=1;i<4;i++){
//使上一个切片的结束(x,y)成为下一个切片的开始(x,y)。
endX=startCoOrds.x-(blackDotX*Math.sin(30));
endY=startcoods.y+(blackDotY*Math.cos(30));
//使用开始/结束位置的位置设置控制点的位置(目前仅使用末端+10-10进行调整)
controlX=((endX-startCoOrds.x)/2)+(startCoOrds.x)+10;
controlY=((endY-startcoods.y)/2)+(startcoods.y)-10;
//划片
context.save();
context.beginPath();
上下文。移动到(cenX,cenY);
lineTo(startcoods.x,startcoods.y);
二次曲线(controlX,controlY,endX,endY);
上下文。lineTo(欧洲标准化委员会、欧洲标准化委员会);
//使上一个切片的结束(x,y)成为下一个切片的开始(x,y)
startCoOrds.x=endX;
startCoOrds.y=endY;
closePath();
context.globalAlpha=0.1;
context.fillStyle=“#333”;
context.fill();
context.lineWidth=2;
context.strokeStyle=“#ffffffff”;
stroke();
restore();
}
使用最近的“黑点”作为圆的半径,
使用圆,将象限划分为3()
然后按0,0和“黑点”之间距离的比率缩放点
实际上,圆弧是在x轴或y轴上缩放的圆的象限。使用最接近的“黑点”作为圆的半径,
使用圆,将象限划分为3()
然后按0,0和“黑点”之间距离的比率缩放点
实际上,您的圆弧是在x轴或y轴上缩放的圆的象限。@Feeny我已经运行了此操作,但我仍然不清楚-抱歉。“globalPosX和globalPosY分别等于两个大黑色圆圈各自的位置”是什么意思。黑圈在哪里?我知道图像不见了。我投票支持你。你现在能穿上吗?@CrabBucket我需要加上声望10images@Feeny您现在应该有足够的代表;)我为你做了一把小提琴。请填空,让它发挥作用,并将其编辑到你的问题中,这样人们就可以更容易地深入到代码中=)@puk-谢谢,我只是在输入代码,但有点小问题。我输入的代码可以工作,但不确定如何将其设置为在JSFIDLE中工作@感觉我已经运行了这个,但我仍然不清楚-对不起。“globalPosX和globalPosY分别等于两个大黑色圆圈各自的位置”是什么意思。黑圈在哪里?我知道图像不见了。我投票支持你。你现在能穿上吗?@CrabBucket我需要加上声望10images@Feeny您现在应该有足够的代表;)我为你做了一把小提琴。请填空,让它发挥作用,并将其编辑到你的问题中,这样人们就可以更容易地深入到代码中=)@puk-谢谢,我只是在输入代码,但有点小问题。我输入的代码可以工作,但不确定如何将其设置为在JSFIDLE中工作。