Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将二次切片拆分为3个较小的切片HTML5画布JS_Javascript_Html_Canvas_Split_Quadratic - Fatal编程技术网

Javascript 将二次切片拆分为3个较小的切片HTML5画布JS

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

我有一条二次曲线,我用它来创建一个饼图的切片。切片位于x轴和y轴上,中心点位于(0,0)。半径在半径X和半径Y处是可变的。这个切片移动90度

我需要将这个切片分成3个独立的切片(每个切片都有30度的角度),并让它们匹配父切片的任何曲线

下图显示了切片的可能示例。黑色圆圈调整切片的大小/形状:

以下是我创建的函数,但它无法正常工作:

//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中工作。