javascript - 将二次切片分成 3 个较小的切片 HTML5 CANVAS JS

标签 javascript html canvas split quadratic

我有一条二次曲线,用于创建饼图的一部分。切片位于 x 和 y 轴上,中心点位于 (0,0)。半径在 radiusX 和 radiusY 处可变。此切片行进 90 度。

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

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

enter image description here enter image description here enter image description here

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

//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();
    }

最佳答案

使用最近的“blackDot”作为圆的半径, 使用圆圈,将你的象限分成 3 ( see wiki ) 然后按 0,0 和“blackDot”之间的距离比例缩放点

实际上,您的圆弧是在 x 轴或 y 轴上缩放的圆的象限。

关于javascript - 将二次切片分成 3 个较小的切片 HTML5 CANVAS JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835064/

相关文章:

html - 导航栏中的链接不起作用

javascript - Canvas 上的 Html 绘图被调整大小

javascript - 当数据集变大时,保持图形中的 Y 轴比例,并在 X 轴上滚动。纵横比问题

javascript - 在 Canvas 折线图中显示负值

javascript - 如何使用 JavaScript 更改样式参数?

javascript - 在 ReactJS 中使用单独的方法填充渲染方法

javascript - jQuery 动画屏幕使用 (x)%

javascript - jquery菜单(某些 `<li>`包含内部 `<ul>`标签)

javascript - 循环遍历数组并分配新数组的键

javascript - 如何仅在使用 css 或(angular)javascript 的特定单词后将句子分成 2 行