Я подозреваю, что здесь есть риск преждевременной оптимизации. Кроме того, будьте осторожны с вашей геометрией. Ваш противоположный / соседний подход - это свойство прямоугольных треугольников, это то, что у вас есть на самом деле?
Я предполагаю, что ваши точки плоские, и поэтому для общего случая они неявно представляют два вектора из начала координат (назовите их v1 v2), поэтому ваш угол равен
theta = arccos (точка (v1, v2) / (| v1 || v2 |)) где |. | длина вектора.
Ускорение (при необходимости) будет зависеть от многих вещей. Вы знаете длины векторов или должны их вычислять? Как быстро вы можете сделать точечный продукт в вашей архитектуре. Насколько быстро acos? В какой-то момент могут помочь такие хитрости, как поиск в таблице (возможно, интерполированный), но это будет стоить вам точности.
Это все компромиссы, хотя, на самом деле, нет общего ответа на ваш вопрос.
[редактировать: добавлен комментарий]
Я хотел бы еще раз подчеркнуть, что частая игра в "x - самый быстрый", в любом случае, немного напоминает игру с современными процессорами и компиляторами. Вы не узнаете, пока не измерите его и не начнете создавать сгенерированный код Когда вы дойдете до того, что на этом уровне действительно заботитесь о (надеюсь, небольшом) фрагменте кода, вы можете детально узнать, что делает ваша система. Но это кропотливо. Может быть, стол это хорошо. Но, возможно, у вас есть быстрые векторные вычисления и небольшой кеш. и т. д. и т. д. Это все зависит Извини насчет этого. С другой стороны, если вы не достигли точки, когда вы действительно сильно заботитесь об этом куске кода ... вам, вероятно, вообще не следует думать об этом на этом уровне. Сделать это правильно. Сделайте это чистым (что означает абстракцию, а также код). Тогда беспокойтесь о накладных расходах.