2014-11-15 8 views
1

В приведенной ниже схеме, мне нужно найти среднюю точку М дуги от А до Б:Алгоритм - Найти середину дуги

midpoint

Я хочу найти M в терминах следующих информация:

  • AX и AY, координаты
  • BX и BY, координаты B
  • радиус, радиус дуги
  • Center.X и Center.Y, центр дуги

Как вычислить координаты М?

+4

Там буквально не вопрос здесь. –

+1

Звучит как интересная проблема. Как далеко вы его решали? – R0MANARMY

+0

Вопрос в том, как к алгоритму, который мне нужно использовать, чтобы найти X и Y середины дуги? – michaelbr92

ответ

4

Предполагая 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;