我有两个2D矢量,比如u和v,由笛卡尔坐标定义。
想象一下,向量是时钟的针。我正在寻找最快的方法来找出,使用python,如果v是在你之前或之前(或者换句话说,在半平面中找到v是关于你的位置)。出于问题的目的,如果向量对齐,则应该在之前回答。
使用一些三角函数似乎很容易,但我相信应该有更快的方法只使用坐标。
我的测试用例:
def after(u, v):
"""code here"""
答案 0 :(得分:13)
def after(u, v):
# return sign of cross product
return u[0]*v[1]<u[1]*v[0]
不知道它是否快,但它很简洁
答案 1 :(得分:0)
一般想法:旋转x轴使其与v重合并检查u的新y坐标是否为正。
答案 2 :(得分:0)
所以你想知道代表向量的线的哪一侧你在向量v的头部的点是什么?我点击谷歌(查询:point on side of line
)获取算法;发现吨,this one(读第二篇文章)没有三角法。
答案 3 :(得分:0)
如果你是通过旋转,你可以使用简单的三角法来计算旋转。
还记得高中三年级的三条规则吗? “SOH CAH TOA”敲响了什么铃声?这就是他们的意思:
给出正确的三角形:
A *
| \
| \
| \
B *----* C
<强> SOH:强>
由ΔABC形成的任何角度的正弦等于相反的边长除以斜边的长度。例如,为了找到在C点形成的角度:
__
AB
SIN(∠BCA) = ----
__
AC
<强> CAH:强>
由ΔABC形成的任何角度的余弦等于相邻边(不是斜边)的长度除以斜边的长度。因此,例如,要找到在C点形成的角度:
__
BC
COS(∠BCA) = ----
__
AC
<强> TOA:强>
由ΔABC形成的任何角度的切线等于相对侧的长度除以相邻边的长度(不是斜边)。因此,例如,要找到在C点形成的角度:
__
AB
TAN(∠BCA) = ----
__
BC
因此,如果你能确定这些测量中的任何一个,你可以确定其余的,只要你想到坐标和轴形成的直角三角形。