2. 向量的点积 分享至QQ空间

发布时间: 2017-01-11 11:26:28.0 点击: 183

向量的“点积”,也叫内积、点乘,两个向量u和v的点积定义为:

u.v = |u||v|cos(θ)

即两向量长度乘以夹角的余弦。

当u和v垂直时,u.v=0(因为90度角的余弦值为0)

当u和v同向时,则u.v = |u||v|

如果将u(x1, y1)和v(x2, y2)表示为:

u = x1i+y1j

v = x2i+y2j

期中ij表示横轴和纵轴单位向量。

则u.v = (x1i+y1j).(x2i+y2j)=x1x2+y1y2

因此两向量的内积为相应坐标乘积之和,代码如下:

double Dot(Vector a, Vector b)
{
	return a.x*b.x + a.y*b.y;
}

从而可以求出两个向量的夹角公式为:

cos(θ) = u.v / (|u||v|)

代码实现如下:

double Length(Vector a)
{
	return sqrt(Dot(a, a));
}

double Angle(Vector a, Vector b)
{
	return acos(Dot(a, b)/(Length(a)*Length(b)));
}
//测试代码
int main()
{
	Vector v1(1, 0), v2(1, 1); //构造函数测试 
	printf("%.2f\n", Angle(v1, v2));//弧度
	printf("%.2f\n", Angle(v1, v2)*180/acos(-1.0)); //角度 
	return 0;
}



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