Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Здравствуйте. Есть две точки А [x;y] B[x;y]. Как определить угол между соединяющим их отрезком и осью координат (X или Y -

Return0 Профи (678), на голосовании 10 лет назад
Есть две точки А [x;y] B[x;y]. Как определить угол между соединяющим их отрезком и осью координат (X или Y - всё равно) . Я понимаю, что всё просто: arctangens(y/x), но это не подходит - слишком долго считается в программе. Нужна простая быстрая функция, которая в ущерб точности (можно значительный ущерб точности) определит угол в любой из 4-х четвертях. Арктангенс в этом смысле вроде не подходит, так как y/x = -y/-x. Помогите. 5-й день мозг болит. Повторюсь: плевать на точности, главное - скорость выполнения. И ещё, необходимо получать угол со значением не от 0 до 360, а от 0 до 65536. Возможно кто-то до меня дошёл до этого, прошу помощи.
Голосование за лучший ответ
Капитан Гугл Искусственный Интеллект (146199) 10 лет назад
1. Какая именно скорость нужна? Сколько нужно считать углов в секунду, на каком процессоре? Может, оптимизировать алгоритм в целом, а не одну его деталь?
2. Большинство ЯП имеют, кроме функции atan, функцию atan2, принимающую 2 параметра и лишенную проблемы знаков (и деления заодно) .
3. Преобразование - одно умножение.
4. Общее. Если поискать в Гугле "как правильно задавать вопросы", выскакивает очень интересный документ, в котором сказано, в частности, следующее:
Вопрос:
Как можно с помощью X сделать Y?

Ответ:
Если вы хотите сделать Y, надо так и спрашивать, не предполагая заранее использование метода, который может вовсе не подходить. Вопросы такого вида часто задают те, кто не просто ничего не знает об X, но сбит с толку решаемой проблемой Y и слишком сконцентрирован на деталях своей конкретной ситуации. Обычно лучше игнорировать таких людей, пока они не сформулируют свою проблему лучше.
Return0Профи (678) 10 лет назад
Я программист, соглашусь, в математике я не так силён - поэтому и спрашиваю.
В секунду должно обрабатываться несколько миллионов точек(не предел).
Поэтому и написал, что плевать на точность. Т.е. нужен максимально быстрая формула/алгоритм.

Возможно я не умею задавать вопрос - поправьте меня, но это не от не знания, а от того, что обычно я сам ко всему прихожу, а тут уже замучался.
Капитан Гугл Искусственный Интеллект (146199) Еще раз, прямым текстом то, что я сказал в п.п. 1 и 4: что именно рассчитывается? Почему нужно считать столько углов?
Похожие вопросы