簡體   English   中英

找到兩個向量和它們之間的角度

[英]Find two vectors and angle between them

我有一輛車和一個代表行人的點,我能夠找到向量 a 和 b(見下圖)然后我試圖計算它們之間的角度

我使用已知的公式 cos(Angle) = magnitude(vector_a)*magnitude(vector_a))/dot_product(vector_a,vector_b) 但是當我計算余弦時它比一個大得多所以不可能計算角度......我究竟做錯了什么?

    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)

在此處輸入圖像描述

非常感謝你

您需要汽車的航向和行人相對於汽車的位置。 如果你有行人和汽車在世界坐標中的位置(即絕對位置)和汽車的速度,代碼很簡單:

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°

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM