дуга преобразует начальную конечную точку в начальный угол конечный угол

Учитывая описание дуги, которая имеет начальную и конечную точки (оба в декартовых координатах x, y), радиус и направление (по часовой стрелке или против часовой стрелки), мне нужно преобразовать дугу в одну с начальным углом, конечным углом , центр и радиус.

Есть ли известный алгоритм или псевдокод, который позволяет мне это сделать? Кроме того, есть ли какой-либо специальный термин для описания такого рода преобразований?


person dr jerry    schedule 07.04.2013    source источник
comment
ИМЕННО мой вопрос тоже. Вы выбрали один из этих ответов или что-то еще?   -  person scott_f    schedule 20.08.2015


Ответы (2)


Вы можете найти центр, решая эту систему уравнений:

(sx-cx)^2 + (sy-cy)^2=R^2
(ex-cx)^2 + (ey-cy)^2=R^2

где (sx,sy) — координаты начальной точки, (ex,ey) — конечной точки, неизвестные cx, cy — центра. Эта система имеет два решения. Тогда можно найти углы как

StartAngle = ArcTan2(sy-cy, sx-cx)
EndAngle = ArcTan2(ey-cy, ex-cx)

Отметим, что известное направление не позволяет выбрать одно из двух возможных решений без дополнительных ограничений. Например, start=(0,1), end=(1,0), R=1 и Dir = по часовой стрелке дают нам дугу Pi/2 с центром (0,0) и дугу 3*Pi/2 с центром ( 1,1)

person MBo    schedule 07.04.2013
comment
Если мы имеем дело с трехмерной системой координат, как будут выглядеть формулы StartAngle и EndAngle? - person CinCout; 08.03.2021
comment
@CinCout В 3D мы должны выбрать/определить плоскость для дуги и работать в этой плоскости, как в 2D (по часовой стрелке и прочее не имеет смысла в 3D) - person MBo; 08.03.2021

Я бы предложил другой подход, чем MBo, для получения центров двух кругов, которые имеют заданный радиус и проходят как к начальной, так и к конечной точке.

Если P и Q являются начальной и конечной точками дуги, центр каждой из двух окружностей лежит на линии L, которая ортогональна PQ, линии от P до Q и которая делит PQ пополам. Расстояние d от центров до L легко получить по теореме Пифагора. Если e — длина PQ, то d^2 + (e/2)^2 = r^2. Таким образом, вы избегаете решения той системы уравнений, которую вы получаете из подхода MBo.

Обратите внимание, что если у вас есть полукруг, любой подход станет численно нестабильным, потому что есть только один круг заданного радиуса с P и Q на нем. (Наверное, я припоминаю, что в этом случае правильный термин — «проблема поставлена ​​некорректно». Это происходит, когда P и Q отстоят друг от друга точно на 2r, и чтобы выяснить, действительно ли это верно, вам нужно проверить равенство двух двойников, что всегда немного проблематично.Если по какой-то причине вы знаете, что у вас есть полукруг, вам лучше просто вычислить центр PQ).

person Thomas    schedule 07.04.2013