Предполагая A
, B
, M
и Center
являются объектами некоторого векторного типа с обычными операциями:
var a = A-C;
var b = B-C;
var m = a+b;
m
представляет собой вектор, который идет от Center
в сторону M
. Поэтому:
m = m.Normalize() * Radius;
M = Center + m;
Обратите внимание: Этот алгоритм не предполагает порядок А и В, и всегда интерпретирует дугу как меньшее из двух возможных. Без добавления особых случаев он может обрабатывать только дуги с углом меньше 180 °.
Для обработки заказа: Сначала вычислить угол от а до Ь, используя atan2:
var angle = Math.Atan2(b.y, b.x) - Math.Atan2(a.y, a.x);
if (angle < 0)
{
angle = 2*Math.PI + angle;
}
Тогда rotatea
на половину этого угла:
angle /= 2;
var m = a.Rotate(angle);
M = Center + m;
Там буквально не вопрос здесь. –
Звучит как интересная проблема. Как далеко вы его решали? – R0MANARMY
Вопрос в том, как к алгоритму, который мне нужно использовать, чтобы найти X и Y середины дуги? – michaelbr92