我正在嘗試實作一種演算法來計算兩個向量之間方向的有符號變化。在這里,我將航向的有符號變化定義為需要從給定向量的角度添加或減去以滿足另一個向量的角度的最小角度。

我有一個幼稚的實作,但我想知道是否有更好的方法。
import math
def signum(value):
if value > 0:
return 1
if value < 0:
return -1
return 0
def angleOfVector(v):
return math.atan2(v[1], v[0])
def principalAngleOfVector(v):
theta = angleOfVector(v)
if theta < 0:
theta = 2 * math.pi
return theta
def signedChangeInHeading(src, dst):
theta_src = principalAngleOfVector(src)
theta_dst = principalAngleOfVector(dst)
initial_sign = signum(theta_dst-theta_src)
initial_guess_magnitude = abs(theta_dst-theta_src)
alternate_guess_magnitude = 2*math.pi-abs(theta_dst-theta_src)
ret_magnitude = initial_guess_magnitude
ret_sign = initial_sign
if alternate_guess_magnitude < ret_magnitude:
ret_sign = -initial_sign
ret_magnitude = alternate_guess_magnitude
return ret_sign * ret_magnitude
uj5u.com熱心網友回復:
我會用atan2(Ax * By - Ay * Bx, Ax * Bx Ay * By).
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523890.html
標籤:Python算法几何学
