дуга через 3 точки в определенном направлении

Я застрял в 8-градусном вопросе о геометрии = (Мне нужно нарисовать дугу из 3 точек в определенном направлении. Допустим, у меня есть 3 точки vec2 P1, P2, P3; мне удалось найти центр дуги:

circleCenter: function (b, c, d) {
    var temp = Math.pow(c.x, 2) + Math.pow(c.y, 2);
    var bc = (Math.pow(b.x, 2) + Math.pow(b.y, 2) - temp) / 2.;
    var cd = (temp - Math.pow(d.x, 2) - Math.pow(d.y, 2)) / 2.;
    var det = (b.x - c.x) * (c.y - d.y) - (c.x - d.x) * (b.y - c.y);

    if (Math.abs(det) < 1e-14)
        return false;

    var circ = new THREE.Vector2((bc * (c.y - d.y) - cd * (b.y - c.y)) / det,
    ((b.x - c.x) * cd - (c.x - d.x) * bc) / det
    );

    return circ;
},

и радиус ...

    var startPoint = P1;
    var endPoint = P3;
    var centerPoint = P2;

    var centerPoint = this.circle(startPoint, centerPoint, endPoint);

    var r = Math.sqrt((startPoint.x - centerPoint.x) * (startPoint.x - centerPoint.x) + (startPoint.y - centerPoint.y) * (startPoint.y - centerPoint.y));

третий шаг - найти углы, в которых я застрял. Я рассчитываю углы таким образом для каждой точки, которую я имею:

angleFromOrigin: function (c, p) {
    var x = p.x - c.x;
    var y = p.y - c.y;
    var theta = (180 / Math.PI * Math.atan2(y, x));
    return theta;
},

Но этот подход не дает мне а) направление, б) он не всегда включает 3-ю точку (показывает противоположную дугу на окружности)

поэтому мне нужно исправить те углы, которые у меня есть, используя направление вращения (по часовой стрелке, против часовой стрелки) и 3-й угол, который мне нужно включить в дугу. Эта часть дала мне переполнение стека в моей голове ... все ссылки в Google стали одной, что привело к написанию страницы с вопросами. Я не могу выйти из коробки ... Помоги мне, коллективный разум))

Ответы на вопрос(1)

Ваш ответ на вопрос