【问题标题】:Cross product of 2 2D vectors2 个二维向量的叉积
【发布时间】:2011-01-20 22:56:37
【问题描述】:

谁能提供一个返回两个二维向量叉积的函数示例?我正在尝试实现this algorithm。

C 代码会很棒。谢谢。


编辑:找到了另一种适用于 2D 并且非常简单的方法。

bool tri2d::inTriangle(vec2d pt) {
    float AB = (pt.y-p1.y)*(p2.x-p1.x) - (pt.x-p1.x)*(p2.y-p1.y);
    float CA = (pt.y-p3.y)*(p1.x-p3.x) - (pt.x-p3.x)*(p1.y-p3.y);
    float BC = (pt.y-p2.y)*(p3.x-p2.x) - (pt.x-p2.x)*(p3.y-p2.y);

    if (AB*BC>0.f && BC*CA>0.f)
        return true;
    return false;    
}

【问题讨论】:

  • 这是工作还是在家工作?
  • 这是个人欣赏。为什么?
  • @tm1rbt -- 因为 SOers 喜欢知道我们什么时候在做或帮助做作业,以便我们可以将学分转移到我们自己的成绩单上。
  • 你到底怎么能要求一个函数来计算叉积,接受一个不正确的答案,然后发布一个返回布尔值的函数?我对此投了反对票并投票结束。

标签: c math vector 2d


【解决方案1】:

【讨论】:

    【解决方案2】:

    (注意: 2 个向量的叉积仅在 3D 和7D spaces 中定义。)

    代码计算位于 xy 平面上的 2 个向量的 z 分量:

    vec2D a, b;
    ...
    double z = a.x * b.y - b.x * a.y;
    return z;
    

    【讨论】:

    • 哇。想给你一个额外的 +1 链接!
    • @tm1rbrt:CrossProduct 应该是一个完整的 3D 交叉产品。您可以随时添加两个 0 组件。
    • 3D 空间中两个向量的叉积是一个 3D 向量,但您的代码只返回一个双精度值。一个组件有什么用?
    • x/y 平面中两个向量的 3-D 叉积始终沿 z 轴,因此提供两个已知为零的附加数字毫无意义。另一种看待它的方式:与 3-D 叉积最接近的 2-D 是一个返回标量的操作(上面的那个)。
    • 另外,我想向您保证,上述操作实际上可以与您链接到的算法一起正常工作。如果你计算出来,得到的叉积向量的点积会简化为得到的标量的简单乘积。您上面的更新版本可以被认为是这个的简化(并且很好地对称!)版本:通过将问题简化为比较结果标量的符号,您可以确定原始三角形的方向是多余的。
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 2015-12-27
    • 2020-01-16
    • 2015-01-18
    • 2018-07-15
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多