Можно создать дубликат:
Circle line collision detectionВычисление угла от х, у координаты
Я пытаюсь сделать тестирование столкновения между сегментом конечной линии, и отрезок дуги. У меня есть тест на столкновение, в котором сегмент линии и сегмент линии, поэтому я собирался аппроксимировать эти сегменты дуги сегментами линий и запустить мой существующий тест.
Данные, которые я определяю для сегмента (-ов) дуги, являются тремя точками. Два из них - конечные точки, лежащие на окружности круга, а третья точка - центр этого круга.
До сих пор это то, что у меня есть:
Пусть (а, б) быть центральной точки окружности, пусть «г» радиус окружности, и (x1, y1), (x2, y2) - концы дуги, лежащие на окружности круга.
Следующие параметрические уравнения дают координаты x и y дуги. 't' - параметрическая переменная.
х = а + г * соз (т) у = Ь + г * Sin (т)
Чтобы создать отрезки от дуги, Я хотел бы пройти дугу в течение некоторого фиксированного соотношения ' t 'создания сегментов линии по пути, пока я не достиг конца дуги. Для этого я решил, что мне нужно будет найти начальный и конечный угол. Я начал бы идти дугой от начального угла и заканчивался под углом. Поскольку я знаю начальную и конечную точки, я решил, что могу использовать эти уравнения для решения этих углов. Ниже приведены мои уравнения для этого:
т = агссоз ((XA)/г)
или
т = acrcsin ((Yb)/г)
проблема в том, что диапазон значений, возвращаемых этими функциями (http://en.wikipedia.org/wiki/Inverse_trigonometric_function) ограничен, поэтому существует высокая вероятность того, что угол, который я ищу, не будет возвращен, поскольку эти функции являются многозначными: arcsin (0) = 0, но также arcsin (0) = π, arcsin (0) = 2π и т. Д.
Как получить точный угол (и), который я ищу? Или вы можете подумать о лучшем/другом способе достижения моей цели?
Я редактировал заголовок вопроса, потому что кажется, что вы действительно спрашиваете, как вычислить углы, а проблема аппроксимации кривой с помощью сегментов линии - это просто контекст. –
Конечные точки дуги и центр круга определяют любую из двух дуг (они дополняют друг друга, чтобы составить весь круг). как вы определяете, какая дуга имеет значение? – Jonathan