gpt4 book ai didi

python - 找到两个向量和它们之间的角度

转载 作者:太空宇宙 更新时间:2023-11-03 20:03:05 27 4
gpt4 key购买 nike

我有一辆车和一个代表行人的点,我能够找到向量 a 和 b(见下图),然后我尝试计算它们之间的角度

我使用已知的公式cos(角度)=幅度(向量a)*幅度(向量a))/点积(向量a,向量b),但是当我计算余弦时,它比1大得多,所以不可能计算角度...我做错了什么?

    def detect_pedestrian(car,pedestrian):
#Find a vector which connects pedestrian with a car
pedestrian_position = pedestrian.body.position
car_position = car.body.position

#Find vectors a and b
car_vector = Box2D.b2Body.__GetTransform(car.body).R.GetYAxis()
pedestrian_vector = pedestrian_position - car_position

#Calculate magnitudes of both vector
pedestrian_vector_magnitude = np.linalg.norm(pedestrian_vector)
car_vector_magnitude = np.linalg.norm(car_vector)

#Normalize both vectors
pedestrian_vector_normalized = pedestrian_vector/pedestrian_vector_magnitude
car_vector_normalized = car_vector/car_vector_magnitude

#Calculate angle
magnitudes = pedestrian_vector_magnitude * car_vector_magnitude
dot_product = b2Dot(pedestrian_vector_normalized, car_vector_normalized)
cosine = magnitudes/dot_product
arccos = np.arccos(cosine)

print(cosine)

enter image description here

非常感谢

最佳答案

您需要汽车的航向以及行人相对于汽车的位置。如果您有行人和汽车在世界坐标中的位置(即绝对位置)和汽车的速度,则代码很简单:

import numpy as np

def detect_pedestrian(car_vector, pedestrian_vector, car_velocity):
pedestrian_relative = pedestrian_vector - car_vector
pedestrian_length = np.linalg.norm(pedestrian_relative)
velocity_length = np.linalg.norm(car_velocity)
dot_product = np.dot(pedestrian_relative, car_velocity)
cosine = dot_product / (pedestrian_length * velocity_length)
return(np.arccos(cosine))

car = np.array([5, 2])
pedestrian = np.array([2, 3])
v = np.array([0, 2])

angle_rad = detect_pedestrian(car, pedestrian, v)
print(f"Pedestrian angle: {np.degrees(angle_rad)}°")
# Pedestrian angle: 71.56505117707799°

关于python - 找到两个向量和它们之间的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com