Я не уверен, что я даже спрашиваю об этом. Это для рисования на планшетах, и сейчас у меня есть линии с подвижными точками на каждом конце, поэтому холст является интерактивным. Я хочу использовать кривую для создания дуги двери, которая будет нарисована после этой линии. У меня есть начальная и конечная точка из существующего кода, где начинать и заканчивать кривую, но элементы управления дугой относятся к определенной координате, которая не вычисляется, поэтому дуга никогда не идет туда, где она должна.
Это то, что я имею прямо сейчас, я узнал, что moveTo() и lineTo() - это то, что контролирует его начальную и конечную точку. Спасибо за помощь, я никогда не играл с полотнами раньше
activeLineDrawing.beginPath();
activeLineDrawing.moveTo(lineSegments[lineSeg].panels[i].getX2(),lineSegments[lineSeg].panels[i].getY2());
activeLineDrawing.lineTo(lineSegments[lineSeg].panels[i].getX1(),lineSegments[lineSeg].panels[i].getY1());
activeLineDrawing.bezierCurveTo(100, 75, 50, 1, lineSegments[lineSeg].panels[i].getX2(),lineSegments[lineSeg].panels[i].getY2());
activeLineDrawing.fillStyle = 'lightgrey';
activeLineDrawing.strokeStyle = 'lightgrey';
activeLineDrawing.stroke();
activeLineDrawing.closePath();
Попробуйте с обычной дугой, вот пример кода
function drawDoor(ctx, color, sx, sy, ex, ey, offset) {
var mx = (sx + (sx + ex) / 2) /2
var my = (sy + (sy + ey) / 2) /2
var iniAng = Math.atan2(ey-sy, ex-sx)/Math.PI - offset;
var endAng = (iniAng + offset);
ctx.beginPath();
ctx.moveTo(sx, sy);
ctx.strokeStyle = color;
ctx.lineWidth=3;
ctx.lineTo(mx, my);
ctx.arc(mx, my, 45, iniAng * Math.PI, endAng * Math.PI, offset<0);
ctx.lineTo(ex, ey);
ctx.stroke();
ctx.closePath();
}
var canvas = document.getElementById("canvas");
var activeLineDrawing = canvas.getContext("2d");
// Door opening to the left
drawDoor(activeLineDrawing, "black", 180, 60, 270, 60, 0.5);
// Door opening to the right
drawDoor(activeLineDrawing, "red", 200, 100, 290, 100, -0.5);
// Diagonal door opening right
drawDoor(activeLineDrawing, "blue", 20, 20, 75, 80, -0.5);
// Diagonal door opening left
drawDoor(activeLineDrawing, "green", 50, 30, 140, 90, 0.5);
// Closet doors double opening
drawDoor(activeLineDrawing, "cyan", 145, 30, 145, 90, 0.25);
drawDoor(activeLineDrawing, "cyan", 145, 150, 145, 90, -0.25);
<canvas id="canvas" width="300" height="150"></canvas>
Моя рекомендация потратила некоторое время на чтение и понимание математики за тем, что я здесь делаю, то же самое можно применить и во многих других местах.