寻找向量旋转的最快方法
我有两个二维向量,叫做 u 和 v,它们是用笛卡尔坐标来定义的。
可以想象这些向量就像时钟的指针。我想用 Python 找出 v 是在 u 的前面还是后面(换句话说,就是判断 v 在 u 的哪个半平面)。在这个问题中,如果两个向量是对齐的,答案应该算作在前面。
这看起来用一些三角函数就能解决,但我觉得用坐标来解决会更快。
我的测试案例:
def after(u, v):
"""code here"""
- after((4,2), (6, 1)) : True
- after((4,2), (3, 3)) : False
- after((4,2), (2, 1)) : False
- after((4,2), (3, -3)) : True
- after((4,2), (-2, -5)) : True
- after((4,2), (-4, -2)) : False
4 个回答
0
你想知道向量u所代表的那条线的哪一侧,向量v的起点在哪儿吗?我在谷歌上搜索了一个算法,输入的关键词是point on side of line
,找到了很多资料。其中有一个链接,这个(看第二个帖子)是用不着三角函数就能解决这个问题的。
0
大致意思是:把x轴旋转到和向量v对齐,然后检查向量u的新y坐标是否为正数。
13
def after(u, v):
# return sign of cross product
return u[0]*v[1]<u[1]*v[0]
我不知道这个快不快,但它写得很简洁。