#python #numpy #vector #time
#python #numpy #вектор #время
Вопрос:
У меня есть двумерный вектор hour_vector
, который представляет маленькую стрелку часов, и я хочу преобразовать этот вектор, чтобы показать час, который он указывает.
Например, вектор [0, 1]
представляет «12:00» на часах, или вектор [1, 0]
представляет «3:00». Аналогично, вектор [1, 1]
показывает «1:30», и так же [2,2]
, и [10,10]
т. Е. Векторы разной длины, которые указывают на одно и то же направление, представляют одно и то же время.
Я начал с вычисления угла между двумя векторами (один из которых является источником), но я не уверен, куда двигаться дальше:
import numpy as np
def angle(a, b):
dot_product = round(np.dot(a, b), 1)
angle = round(np.degrees(np.arccos(dot_product / (np.linalg.norm(a) * np.linalg.norm(b)))), 1)
return angle
print(angle_dot(np.array([0., 1.]), np.array([1., 0.])))
## 90.0
Ответ №1:
После вычисления угла вам просто нужно сопоставить эти углы с диапазоном часов, что довольно просто, поскольку оба они начинаются с 0. Попробуйте:
ang = angle(a, b) # Get angle of the vector between 0..360
hour = ang / 360.0 * 12.0 # Scales to hour as float (i.e. 90.0 -> 3.0)
hour_str = f'{int(hour):02}:{int((hour * 60) % 60):02}'
Для угла 45 градусов эти значения:
ang = 45.0
hour = 1.5
hour_str = '01:30'