нажмите, чтобы увидеть изображение
Я пробовал много вещей, включая использование atan2, но это приводит к неправильное представление угла, по крайней мере, так, как я это сделал. Итак, я попытался вычислить это вручную, но это тоже не дало хорошего представления. Чуть ниже вы узнаете, как я это вычисляю
Код: Выделить всё
def calculate_jump_angles(x_coords, y_coords):
"""Calculate the jump angles between consecutive segments in a track."""
angles = []
for i in range(len(x_coords) - 2):
vec1 = (x_coords[i+1] - x_coords[i], y_coords[i+1] - y_coords[i])
vec2 = (x_coords[i+2] - x_coords[i+1], y_coords[i+2] - y_coords[i+1])
dot_product = vec1[0] * vec2[0] + vec1[1] * vec2[1]
mag1 = np.sqrt(vec1[0]**2 + vec1[1]**2)
mag2 = np.sqrt(vec2[0]**2 + vec2[1]**2)
cos_theta = dot_product / (mag1 * mag2)
cos_theta = np.clip(cos_theta, -1.0, 1.0)
angle = np.arccos(cos_theta)
cross_product = vec1[0] * vec2[1] - vec1[1] * vec2[0]
angle = angle if cross_product >= 0 else -angle
angles.append(angle)
return angles
Подробнее здесь: https://stackoverflow.com/questions/791 ... -in-python
Мобильная версия