3.向量的叉积 分享至QQ空间

发布时间: 2017-01-17 14:14:49.0 点击: 163

叉积又称为叉乘,外积。

叉乘的大小为:

| u x v |= |u| |v| |sinθ|

因此,如果两个向量方向相同,其叉乘结果为0(因为正弦值为0)。


叉乘的方向根据右手法则而定,因此在三维坐标系下,三个坐标系向量i(1, 0, 0)、j(0, 1, 0)、k(0, 0, 1),满足:

i x j = kj x i = -k

j x k = ik x j = -i

k x i = ji x k = -j

因此:

u x v = (x1i+y1j+z1k) x (x2i+y2j+z2k)

=x1y2k(ixj)+x1z2(ixk)+y1x2(jxi)+y1z2(jxk)+z1x2(kxi)+z1y2(kxj)

=(x1y2-y1x2)(ixj)+(x1z2-z1x2)(ixk)+(y1z2-z1y2)(jxk)

=(x1y2-y1x2)k-(x1z2-z1x2)j+(y1z2-z1y2)i

=(y1z2-z1y2)i+(z1x2-z2x1)j+(x1y2-y1x2)k

在二维坐标系下,设向量u(x1, y1), v(x2, y2),则将其扩展为三维向量u1(x1, y1, 0)和v1(x2, y2, 0)

u1 x v1 = (x1i+y1j+0k)x(x2i+y2j+0k) = (x1y2-y1x2)k

不知道怎么推了...

二维向量的叉积公式为u x v = x1y2-y1x2

代码如下:

double XProduct(Vector a, Vector b)
{
	return a.x*b.y - a.y*b.x;
}

根据叉乘公式:| u x v |= |u| |v| |sinθ|,以及三角形公式s = a*b*sinθ/2,可见其值为三角形面积的两倍,即下图平行四边形的面积:


而u x v的值根据右手法则有正负之分,因此u x v的几何意义即为上述平行四边形的有向面积。

另外,若已知3点坐标,p1(x1, y1), p2(x2, y2), p3(x3, y3),可以按如下求出面积:

double Area(Point a, Point b, Point c)
{
	Vector v1 = b - a;
	Vector v2 = c - a;
	return fabs(XProduct(v1, v2)/2);
} 
//测试
int main()
{
	Point p1(0, 0), p2(3, 0), p3(0, 4);
	printf("%.2f\n", Area(p1, p2, p3)); 
	return 0;
}



|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.