Итак, у меня есть X & Y Координаты в пределах цикла. Я хочу рассчитать угол (в градусах) в любой точке Точки C (при 40,60 в качестве примера, который будет постоянно изменяться) от точки A и точки B (координаты A + B никогда не будут меняться (45 100) & (55 100)). Я нарисовал изображение в качестве руководства. Как бы я вычислил это питонически, чтобы вычислить его в цикле.Питонический расчет угла в градусах по координатам
ответ
Другой вопрос имеет много аккуратных способов на других языках, но ничего в Python. Поэтому я сделаю это.
import math
bx = 55
by = 100
ax = 45
ay = 100
cx = 40
cy = 60
angle1 = math.atan2(bx-cx, by-cy)
angle2 = math.atan2(ax-cx, ay-cy)
degrees = math.degrees(angle1 - angle2)
if degrees < 0:
degrees = 0 - degrees
if degrees > 180:
degrees = 360 - degrees
print (str)(cx) + ', ' + (str)(cy) + ' makes an angle of ' + (str)(degrees) + ' with 55,100 and 45, 100.';
http://www.tutorialspoint.com/python/number_atan2.htm используется как ссылка.
Atan2 имеет чистое отношение, когда ax = cx или bx, например. либо AC, либо BC - это вертикальная линия, которая всегда вызывает беспокойство, так как вы получаете потенциальное деление на нулевые ошибки.
Просто используйте формулу косинуса:
from math import acos,sqrt,pi
def dist(A,B):
# you can code the euclidean distance between 2 points A, B
CA = dist(C,A)
CB = dist(C,B)
AB = dist(A,B)
theta = (180.0/pi)*acos((CA**2 + CB**2 - AB**2)/(2*CA*CB))
Ваша [формула косинусного закона] (https://en.wikipedia.org/wiki/Law_of_cosines) не совсем верна: вы потеряли некоторые квадраты. Кроме того, неэффективно вычислять одинаковые расстояния 'dist (C, A)', 'dist (C, B)' дважды. –
Спасибо большое, @ PM2Ring, глупо меня. –
- 1. Расчет угла перемещения по
- 2. Преобразование угла в градусах, в вектор
- 3. Расчет угла акселерометра Android
- 4. Расчет угла между двумя векторами?
- 5. Расчет угла ближайшего участка
- 6. Точный расчет угла
- 7. Расчет угла между двумя точками - java
- 8. Расчет угла - получение значения
- 9. Расчет угла/кривизны?
- 10. Расчет угла астероидов
- 11. Расчет угла наклона
- 12. Расчет угла дуги в Java
- 13. Расчет угла отскока в java
- 14. Расчет угла с использованием теоремы Пифагора
- 15. Расчет угла от широты и долготы
- 16. Расчет ускорения на основе угла
- 17. Java: вычисление угла между двумя точками в градусах
- 18. Использование Math.cos() для нахождения косинуса угла в градусах
- 19. Выбор цвета по заданным координатам
- 20. Расчет угла между двумя векторами
- 21. Расчет суммы 3D-угла 3D
- 22. Расчет угла рыскания без калибровки
- 23. Щелкнув по заданным координатам элемента в транспортире
- 24. расчет дельта вращения на основе начального угла и угла тока
- 25. Как бороться с разрывом угла рыскания при 180 градусах
- 26. как сделать снимок экрана по координатам по умолчанию в vb.net?
- 27. Расчет угла между тремя точками в android
- 28. Расчет угла между двумя векторами в GLSL
- 29. Расчет угла и преобразование его в градусы
- 30. Поиск по соседству по координатам?
Что это со всеми точками с запятой? Они разрешены в Python, но не требуются, и они просто заставляют ваш код выглядеть загроможденным. BTW, модуль 'math' поставляет удобные радианы <-> градусов функции преобразования. –
Я немного новичок в python. Я отредактирую их. Я должен был углубиться в математический модуль, чтобы посмотреть на преобразование градусов в радианы. Поэтому я исправил точки с запятой, и я также добавил градусы (#) – aschultz
Намного лучше! Хотя вам не нужны круглые скобки вокруг конструктора строк, поэтому вы можете просто сделать «str (cx)» и т. Д. Однако вместо того, чтобы делать эти явные преобразования строк и конкатенации, вы можете передать кучу отдельных аргументов для 'print 'и он выполнит преобразование строки для вас. Или вы можете использовать функцию 'format', которая дает вам намного больше контроля над выходом. Например, 'print ('{} создает угол {} с {} и {}.'. Format ((cx, cy), degrees, (ax, ay), (bx, by)))'. В этом коде я передаю координатные пары как кортежи, просто чтобы строка формата была простой. –