代码之家  ›  专栏  ›  技术社区  ›  kriss

求向量旋转的最快方法

  •  2
  • kriss  · 技术社区  · 14 年前

    我有两个二维向量,比如u和v,由笛卡尔坐标定义。

    使用一些三角学似乎很容易,但我认为应该有一种只使用坐标的更快的方法。

    我的测试用例:

    def after(u, v):
        """code here"""
    
    • ((4,2),(6,1))之后:真
    • ((4,2)、(3,3))后:假
    • ((4,2)、(2,1))后:假
    • ((4,2),(3,-3)):真
    • 后((4,2),(-4,-2)):假
    4 回复  |  直到 14 年前
        1
  •  13
  •   Pete Kirkham    14 年前
    def after(u, v):
        # return sign of cross product
        return u[0]*v[1]<u[1]*v[0]
    

    不知道是不是快,但很简洁

        2
  •  0
  •   vad    14 年前

    总体思路:旋转x轴使其与v轴重合,并检查u的新y坐标是否为正。

        3
  •  0
  •   High Performance Mark    14 年前

    你想知道代表向量u的线的哪一边,向量v头部的点在哪一边?我点击谷歌(查询: point on side of line )对于算法;找到一吨, this one (读第二篇文章)不用三角学。

        4
  •  0
  •   amphetamachine    14 年前

    如果你要旋转,你可以用简单的三角学来计算旋转。

    还记得高中三角课上的三条规则吗?”苏嘉多有什么事吗?这就是他们的意思:

    给定直角三角形:

    A *
      | \
      |  \
      |   \
    B *----* C
    

    苏门答腊:

    ABC形成的任何角度的正弦等于对边长度除以斜边长度。例如,为了找到在C点形成的角度:

                 __
                 AB
    SIN(∠BCA) = ----
                 __
                 AC
    

    由ABC构成的任何角度的余弦等于相邻边的长度(不是斜边)除以斜边的长度。例如,要找到在C点形成的角度:

                 __
                 BC
    COS(∠BCA) = ----
                 __
                 AC
    

    TOA公司:

                 __
                 AB
    TAN(∠BCA) = ----
                 __
                 BC
    

    所以,如果你能确定这些测量中的任何一个,你就能确定其余的,只要你想到由坐标和轴组成的直角三角形。