Math 二维三重积构造垂线

Math 二维三重积构造垂线,math,vector,collision-detection,cross-product,Math,Vector,Collision Detection,Cross Product,在碰撞检测中,我一直遵循这一点,它使用2d三重积来构造一条垂直线。使用从c0到c1的向量A和从c0到原点的向量B。该主张是A,B,A的三重乘积垂直于A并在原点方向上。我不明白为什么会这样,也不明白在2D中是如何使用叉积的。我看了一下,我绝对不会把它称为一个函数。通常的三重积使用一个叉积和一个点积,而这里是一行中的两个叉积,通过在2d向量上加一个零来构造3d向量。那么会发生什么呢 A×B=(Ax,Ay,0)×(Bx,By,0)=(0,0,Ax)∙通过−嗯∙Bx) …×A=(Ax)∙通过−嗯∙(Bx

在碰撞检测中,我一直遵循这一点,它使用2d三重积来构造一条垂直线。使用从c0c1的向量A和从c0到原点的向量B。该主张是A,B,A的三重乘积垂直于A并在原点方向上。我不明白为什么会这样,也不明白在2D中是如何使用叉积的。

我看了一下,我绝对不会把它称为一个函数。通常的三重积使用一个叉积和一个点积,而这里是一行中的两个叉积,通过在2d向量上加一个零来构造3d向量。那么会发生什么呢

A×B=(Ax,Ay,0)×(Bx,By,0)=(0,0,Ax)∙通过−嗯∙Bx)
…×A=(Ax)∙通过−嗯∙(Bx)∙(唉,−Ax,0)

所以结果是(Ay,−Ax)。这确保了它确实垂直于A,如果A和B是平行的,那么多个变化会精确地表示出来。因此,对于不平行的A和B,一个方向将给出一个方向,另一个方向将给出另一个符号。如果你不想深入思考,就用实验来决定哪个是哪个

顺便说一句,我不会这样做的。相反,我会依赖于一个经典的方向谓词。但我还没有读完所有的文章,所以也许有理由不这么做。如果你想知道更多,请注意行列式

| Ax Bx Cx|
|艾比|
| 1  1  1|
(顺便说一下,它等于三重积(A×B)∙如果你用1而不是0来扩充,那么C)等于由A,B,C组成的三角形的有向面积的两倍。所以这个符号告诉你三角形的方向。你可以用它来计算符号OAB、OBC、OCA。如果他们都同意,原产地就包含在内。注意行列式| OAB |=Ax之类的东西∙通过−嗯∙Bx很容易计算

var-oab=Math.sign(a.x*b.y-a.y*b.x);
var obc=数学符号(b.x*c.y-b.y*c.x);
var oca=数学符号(c.x*a.y-c.y*a.x);
如果(算术平均值(oab+obc+oca)==3){
返回“包含来源”;
}
如果(oab*obc*oca==0){
return“原点在边界上”;
}
var abc=数学符号(a.x*b.y+b.x*c.y+c.x*a.y-
a、 x*c.y-b.x*a.y-c.x*b.y);
如果(oab!=abc){
返回“外线ab”;
}否则如果(obc!=abc){
返回“外线bc”;
}否则{
返回“外线ac”;
}

该链接页面相当长,向量有多种“三重乘积”,因此请包含该三重乘积的摘要。三个3D向量最常见的三重乘积是一个标量,而不是一个向量。是“三重产品”的实现。