2013-04-07 4 views
2

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

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

+0

ТОЧНО мой вопрос тоже. Вы отправились с одним из этих ответов или чем-то еще? –

ответ

5

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

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

где (Sx, Sy) являются координаты начальной точки, (ех, еу) для конечной точки, неизвестных сх, су для центра. Эта система имеет два решения. Тогда можно найти углы, как

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)

3

Я бы предложил другой подход, чем 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).

Смежные вопросы