来自维基百科:
交叉乘积是对三维欧几里德空间中的两个向量的二元运算,其导致另一个向量垂直于包含两个输入向量的平面.
鉴于定义仅定义在三个(或七个,一个和零)维度中,如何计算两个二维向量的叉积?
我见过两个实现.一个返回一个新的向量(但只接受一个向量),另一个返回一个标量(但是是两个向量之间的计算).
实现1(返回标量):
float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
return (v1.X*v2.Y) - (v1.Y*v2.X);
}
Run Code Online (Sandbox Code Playgroud)
实现2(返回向量):
Vector2D CrossProduct(const Vector2D & v) const
{
return Vector2D(v.Y, -v.X);
}
Run Code Online (Sandbox Code Playgroud)
为什么不同的实施?我将使用标量实现?我将使用矢量实现?
我问的原因是因为我自己编写了一个Vector2D类,并且不知道使用哪种方法.
我试图在MatPlotLib中绘制一条线,并根据斜率找到线上方或下方的所有点.
阅读本文后,阅读Cross Product,我相信这是我检查要点的最佳方法.
我不确定在python中实现它的最佳方法是什么.
v1 = {x2-x1, y2-y1} # Vector 1
v2 = {x2-xA, y2-yA} # Vector 2
xp = v1.x*v2.y - v1.y*v2.x # Cross product
Run Code Online (Sandbox Code Playgroud)
有没有人试过实现类似的东西?
我还有其他方法可以找到地块上的点是否在MatPlotLib中的线上方或下方?