首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算二维矢量的叉积

计算二维矢量的叉积
EN

Stack Overflow用户
提问于 2008-10-28 16:22:28
回答 6查看 188.4K关注 0票数 104

来自维基百科:

叉积是在three-dimensional

空间中对两个向量进行的二元运算,得到另一个垂直于包含两个输入向量的平面的向量。

假设定义只在三维(or seven, one and zero)维度上定义,如何计算两个2d向量的叉积?

我已经看到了两个实现。一个返回新的向量(但只接受单个向量),另一个返回标量(但是两个向量之间的计算)。

实现1(返回标量):

代码语言:javascript
复制
float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
    return (v1.X*v2.Y) - (v1.Y*v2.X);
}

实现2(返回一个向量):

代码语言:javascript
复制
Vector2D CrossProduct(const Vector2D & v) const
{
    return Vector2D(v.Y, -v.X);
}

为什么会有不同的实现?我将使用标量实现来做什么?我将使用向量实现来做什么?

我问这个问题的原因是因为我自己正在编写一个Vector2D类,不知道该使用哪个方法。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-28 16:39:04

实现1返回将由输入向量的规则3D叉积产生的向量的大小,隐含地将其Z值取为0(即,将2D空间视为3D空间中的平面)。3D叉积将垂直于该平面,因此具有0 X&Y分量(因此返回的标量是3D叉积向量的Z值)。

请注意,由3D叉积产生的向量的大小也等于两个向量之间的平行四边形的面积,这给了实现1另一个目的。此外,此区域是有符号的,可用于确定从V1旋转到V2是逆时针还是逆时针移动。还应注意,实现1是从这两个向量构建的2x2矩阵的行列式。

实现2返回与输入矢量垂直的矢量,该矢量仍然在相同的2D平面中。不是经典意义上的叉积,而是一致的“给我一个垂直向量”。

请注意,在叉积操作下,3D欧几里得空间是封闭的--即,两个3D向量的叉积返回另一个3D向量。上述两种2D实现在某种程度上都与之不一致。

希望这能帮到你。

票数 122
EN

Stack Overflow用户

发布于 2008-10-28 16:40:56

简而言之:,这是一个数学技巧的简写符号。

长篇解释:

你不能对二维空间中的向量做叉积。该操作没有在那里定义。

然而,通常有趣的是评估两个向量的叉积,假设通过将它们的z坐标设置为零来将2D向量扩展到3D向量。这与在xy平面上使用3D矢量相同。

如果您以这种方式扩展向量并计算这种扩展向量对的叉积,您将注意到只有z分量具有有意义的值:x和y始终为零。

这就是为什么结果的z分量通常简单地作为标量返回的原因。例如,这个标量可以用来寻找2D空间中三个点的缠绕。

从纯数学的角度来看,2D空间中的叉积是不存在的,标量版本是hack,返回2D向量的2D叉积根本没有意义。

票数 78
EN

Stack Overflow用户

发布于 2008-10-28 16:58:27

叉积的另一个有用的属性是它的大小与两个向量之间的角度的正弦有关:

|a x b|= |a|。|b|。正弦(θ)

正弦(θ)=|a x b|/ (|a| .|b|)

因此,在上面的实现1中,如果预先知道ab是单位向量,那么该函数的结果就是那个sine()值。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/243945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档