gpt4 book ai didi

language-agnostic - 计算 2D 向量叉积

转载 作者:行者123 更新时间:2023-12-03 05:23:28 26 4
gpt4 key购买 nike

来自维基百科:

the cross product is a binary operation on two vectors in a three-dimensional Euclidean space that results in another vector which is perpendicular to the plane containing the two input vectors.

鉴于该定义仅在三个 ( or seven, one and zero ) 维度中定义,如何计算两个二维向量的叉积?

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

实现 1(返回标量):

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}

实现2(返回向量):

Vector2D CrossProduct(const Vector2D & v) const
{
return Vector2D(v.Y, -v.X);
}

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

我之所以问这个问题是因为我自己正在写一个Vector2D类,不知道该使用哪种方法。

最佳答案

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

请注意,3D 叉积产生的向量的大小也等于两个向量之间的平行四边形的面积,这为实现 1 提供了另一个用途。另外,这个区域是有符号的,可以用来判断从V1到V2的旋转是逆时针还是顺时针方向。还应该注意的是,实现 1 是由这两个向量构建的 2x2 矩阵的行列式。

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

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

关于language-agnostic - 计算 2D 向量叉积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com