提问人:TOOL 提问时间:6/29/2022 最后编辑:TOOL 更新时间:6/29/2022 访问量:161
如何在 2D 中计算三乘积
How to compute triple product in 2D
问:
我正在阅读这篇关于如何编写用于碰撞检测的 GJK 算法的文章,但我不是在 3D 中进行,而是在 2D 中进行。
但是,在某一时刻有这段代码:
bool Line(
Simplex& points,
vector3& direction)
{
vector3 a = points[0];
vector3 b = points[1];
vector3 ab = b - a;
vector3 ao = - a;
if (SameDirection(ab, ao)) {
direction = ab.cross(ao).cross(ab);
}
else {
points = { a };
direction = ao;
}
return false;
}
正如你所看到的,他将两个叉积链接起来以找到下一个方向,但是我怎么能在2D中做到这一点呢?
这是一张使这些向量更清晰的图片:
答:
3赞
John Alexiou
6/29/2022
#1
3D 中的矢量交叉三元积为
P = a×(b×c)
可以使用以下矩阵/向量积计算全展开
|px| | -ay*by-az*bz ay*bx az*bx | | cx |
|py| = | ax*by -ax*bx-az*bz az*by | | cy |
|pz| | ax*bx ay*bz -ax*bx-ay*by | | cz |
上述投影有多个 2D 投影,如果没有,则一个或两个向量 a、b 或 c 不在平面外(z 分量不为零)。
在您的例子中,所有三个向量都在平面 (和 ) 中,这会产生以下结果az=0
bz=0
cz=0
|px| | -ay*by ay*bx 0 | | cx | | ay*(bx*cy-by*cx) |
|py| = | ax*by -ax*bx 0 | | cy | = | ax*(by*cx-bx*cy) |
| 0| | 0 0 -ax*bx-ay*by | | 0 | | 0 |
所以你有它。上面的右侧是 2D 中 a×(b×c) 的结果。
评论
0赞
TOOL
6/29/2022
多谢!就我而言,对于 ab 将是 b,ao = c 和 ab = a 权利?还是 ab = a、ao = b 和 ab = c?ab.cross(ao).cross(ab);
1赞
TOOL
6/29/2022
啊,我想通了,因为 x (b x c) 等价于 (c x b) x a,所以在我的情况下,它将是 ab x (ao x ab)
1赞
John Alexiou
6/30/2022
@TOOL - 好点取决于如何解析二进制运算符的语言,但在这种情况下,它将是 .(ab.cross(ao)).cross(ab)
上一个:获得π值的最快方法是什么?
下一个:拆分有理贝塞尔
评论
z=0.0
dot