寻找向量旋转的最快方法

2 投票
4 回答
778 浏览
提问于 2025-04-15 23:17

我有两个二维向量,叫做 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]

我不知道这个快不快,但它写得很简洁。

撰写回答