Преобразование 2d-вектора в часы

#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'