如何找到一般两个向量的bisecor b =(bx,by)(我们考虑两个非零向量u =(ux,uy),v =(vx,vy),它们可以是共线的)。
对于非共线矢量,我们可以写:
bx = ux/|u| + vx / |v|
by = uy/|u| + vy / |v|
但是对于共线矢量
bx = by = 0.
示例:
u = (0 , 1)
v = (0, -1)
b = (0, 0)
答案 0 :(得分:6)
一般而均匀的方法是获得两个向量的角度
theta_u = math.atan2(ux, uy)
theta_v = math.atan2(vx, vy)
并创建一个具有平均角度的新矢量:
middle_theta = (theta_u+theta_v)/2
(bx, by) = (cos(middle_theta), sin(middle_theta))
通过这种方式,您可以避免使用相反向量观察到的陷阱。
PS :请注意,“平分线”矢量的含义不明确:通常有两个平分线矢量(通常一个用于较小的角度,一个用于较大的角度)。如果你想在较小的角度里面的平分线矢量,那么你的原始公式是相当不错的;如果您的公式产生空向量,您可以单独处理您观察到的特殊情况,例如通过采用与两个输入向量(-uy/|u|, ux/|u|)
中的任何一个正交的向量。
答案 1 :(得分:5)
找到u和v的单位二分矢量
if u/|u|+v/|v| !=0
first calculate the unit vector of u and v
then use the parallelogram rule to get the bisection (just add them)
since they both have unit of 1, their sum is the bisector vector
then calculate the unit vector of the calculated vector.
else (if u/|u|+v/|v| ==0):
(if you use the method above, it's like a indintermination: 0*infinity=?)
if you want the bisector of (u0v) if u/|u| = (cos(t),sin(t))
take b=(cost(t+Pi/2),sin(t+Pi/2)) = (-sin(t),cos(t) )as the bisector
therefore if u/|u|=(a1,a2) chose b=(-a2,a1)
示例:
u=(0,1)
v=(0,-1)
the bisector of (u0v):
b=(-1,0)