дуга через 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 стали одной, что привело к написанию страницы с вопросами. Я не могу выйти из коробки ... Помоги мне, коллективный разум))