math - 二维中两个向量的平分线(可能共线)

标签 math vector bisect

一般如何找到两个向量的二等分 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)

最佳答案

通用且统一的方法是获取两个向量的角度

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|)如果您的公式产生空向量。

关于math - 二维中两个向量的平分线(可能共线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6562784/

相关文章:

arrays - bash 中数组元素的算术运算

检查多边形是否凸

c++ - 在 Xcode 中使用 C++17 标准库中的贝塞尔数学函数

c++ - Getline 只返回空白

git - 如何恢复 git bisect

python - 在元组列表上使用二分法,但仅使用第一个值进行比较

mercurial - 如何从 Mercurial 获取平分线的当前状态(好/坏修订的历史)

language-agnostic - 日期范围与可空日期重叠

c++ - 尝试输入结构 vector 内的结构成员会导致段错误

c++ - find_if 错误 : invalid initialisation of reference of type 'const node&' from expression of type 'node*'