Автор оригинала: Amber Mercado.
Эй, финансы! Сегодня вы узнаете важную функцию, что вам может потребоваться написать в будущем: как написать программу Python в Рассчитайте угол между 2 точками по часовой стрелке.
Мы будем использовать принципы на языке Python для написания рабочей программы для записи углов и рассчитать угол или радианы в данной плоскости! Мы собираемся взять наше время и объяснить все, поэтому не беспокоими, когда мы идем через это вместе!
Проблема: расчет угла между двумя точками
В этой конкретной проблеме мы хотим найти угол по часовой стрелке между вектором от происхождения, чтобы указать A, и вектор от происхождения до пункта B. У нас будет три точки и два вектора, чтобы наш угол четко определен. Это может быть использовано как в алгебраических, так и в геометрических определениях. Для нашего примера мы будем использовать геометрическое определение.
Что мы хотим достичь: Написание программы Python, которая рассчитает угол по часовой стрелке.
Наша программа должна иметь возможность рассчитать углы между двумя точками от данного происхождения (0,0)
, пункт A (0,1)
и точка b (1, -1)
Отказ Эти 3 балла дадут угол 45 * от всего 360 *, начиная с центра (х, у)
график
Я хочу показать вам 2 разных способа сделать это. Один из способов у меня будет программа, написанная вам шаг за шагом. Во втором пути я покажу вам больше пифитонного способа написания той же программы, предоставляя вам преимущество при написании программы для интервью кода.
Метод 1: написание этого – трудный путь
В этом примере мы хотим начать с помощью Importing Математический модуль Затем создайте класс, определяющий Вектор
Расположенный х
и y
Отказ Мы создаем следующие переменные, v1
и V2
С параметрами по умолчанию.
import math class Vector: def __init__(self, x, y): self.x = x self.y = y v1 = Vector(0, 1) v2 = Vector(0, -1)
После этого из математики мы используем метод Atan2
Вернуть tan (y/x)
в радианах. Результат между -Пи
и PI
Отказ Вектор в самолете из происхождения до точки (х, у)
делает этот угол с положительным Х
ось. Точка atan2 ()
Это то, что признаки обоих входов известны ему, поэтому он может вычислить правильный квадрант для угла.
Например, Atan (1)
и ATAN2 (1, 1)
оба PI/4
, но ATAN2 (-1, -1)
это -3 * PI/4
Отказ Мы сохраняем эти новые векторы к новым переменным: v1_theta
и v2_theta
Отказ
v1_theta = math.atan2(v1.y, v1.x) v2_theta = math.atan2(v2.y, v2.x) r = (v2_theta - v1_theta) * (180.0 / math.pi) if r < 0: r % 360 print r
Принимая эти две точки и вычитая первое со второго, умножая его по продукту 180, разделенного PI и сохранение его в переменной (« r
»). Мы модуль -R
К 360. R меньше 0, потому что он будет отрицательным числом. После этого мы Печать R
вне. Это всего лишь один способ написать эту проблему. Это немного грязно, и если мы не будем осторожны, мы можем легко получить неверный вывод ответа.
Способ 2: написание этого – питон путь с numpy
В этом следующем примере я буду использовать Numpy, чтобы получить угол между двумя точками и вернулся мне. При записи в Python всегда лучше всего следить за Pep8 и написать вам программу как можно просто, чтобы занять меньше памяти в вашем коде и, следовательно, меньше времени выполнения при тестировании вашей программы.
Первое, что мы сделаем, это Импорт Numpy как NP
Затем определите угол, используя точку 1 ( P1
) и точка 2 ( p2
) в качестве аргументов. Мы снова будем использовать Arctan2
умножено на P1
найти угол 1 и Arctan2
умножено на P2
найти второй угол. Мы вернем степень, используя np.red2Deg
Функция сначала вычитая первый угол от второго, то мы умножаем 2 и np.pi
Затем мы модуль продукт двух ответов. Когда мы вводим наш вектор, мы правильно получаем наш ответ при печати.
import numpy as np def angle_between(p1, p2): ang1 = np.arctan2(*p1[::-1]) ang2 = np.arctan2(*p2[::-1]) return np.rad2deg((ang1 - ang2) % (2 * np.pi)) A = (1, 0) B = (1, -1) print(angle_between(A, B)) # 45. print(angle_between(B, A)) # 315.
Как вы можете увидеть печать Engle_between (A, B)
и Engle_between (b, a)
Дает нам две совокупности разных ответов! Причина этого является потому, что первая точка движется по часовой стрелке ко второй точке, давая нам меньшее число. Собираюсь против часовой стрелки, мы получаем гораздо большее число, чем фактический угол, который мы ищем!
Резюме
Как видите, написание этой программы в Python была проста, потому что Python построил модули Math и Numpy, чтобы сделать код красивым и чистым. Это может показаться произвольным, но эта программа может использоваться в нескольких приложениях от архитектуры для принятия виртуальных туров в отелях, апартаментах или даже ресторанах.
Как показано в это фото Вы можете найти одну точку в пространстве с этими тремя точками. Он также может быть использован в создании виртуальной комнаты или в преступности, когда пытаетесь использовать судебно-медицинскую науку, чтобы поймать плохой парень! Python – удивительный язык программирования, который никогда не перестает удивлять меня. Я надеюсь, что после прочтения этой статьи вы будете вдохновлены, чтобы написать вам собственные программы Python, используя то, что вы узнали здесь, чтобы добавить в свои портфолио.