点积:两个向量v和w的点积等于两者长度的乘积再乘上它们的夹角的余弦。夹角是指v到w的逆时针旋转的角。
夹角大于90度时积为负。(255页2段为止)
double Dot(Vector A, Vector B){ return A.x*B.x + A.y*B.y;}
double Length(Vector A){ return sqrt(Dot(A, A)); }
double Angle(Vector A, Vector B)
{
return acos(Dot(A, B) /Length(A) /Length(B));
}
叉积:两个向量v和w的叉积等于v和w组成的三角形的有向面积的两倍。
顺着第一个向量v看,如果w在左边,那么叉积大于0。
否则小于0,如果两个向量共线,那么叉积等于0。
//叉积
double Cross(Vector A, Vector B){ return A.x * B.y - A.y * B.x; }
double Area2(Point A, Point B, Point C)
{
return Cross(B-A, C-A);}
}
两个向量的位置关系可以把叉积和点积组合在一起判断。
向量旋转。
Vector Rotate(Vector A, double rad)
{
return Vector(A.x*cos(rad) - A.y*sin(rad), A.x*sin(rad) + A.y*cos(rad);
}