计算几何
面积:二维向量叉乘等于围成的平行四边形的面积 (取绝对值),除以二就是所围成的三角形的面积。
顺逆:根据叉乘的正负可以判断两条边是顺逆排列,为正就是顺时针排列。
长度:向量的长度是向量本身的点积的平方根
角度:两个向量夹角的余弦等于它们的点积与它们长度的乘积的商(A和B的点积 / A和B的模长)
- 抄的 jls 的板子(
struct Point {
db x;
db y;
Point(db x = 0, db y = 0) : x(x), y(y) {}
Point &operator+=(const Point &p) {
x += p.x, y += p.y;
return *this;
}
Point &operator-=(const Point &p) {
x -= p.x, y -= p.y;
return *this;
}
Point &operator*=(const db &v) {
x *= v, y *= v;
return *this;
}
friend Point operator-(const Point &p) {
return Point(-p.x, -p.y);
}
friend Point operator+(Point lhs, const Point &rhs) {
return lhs += rhs;
}
friend Point operator-(Point lhs, const Point &rhs) {
return lhs -= rhs;
}
friend Point operator*(Point lhs, const db &rhs) {
return lhs *= rhs;
}
};
db dot(const Point &u, const Point &v) {
return u.x * v.x + u.y * v.y;
}
//记得传的是边(点相减)
db len(const Point &u, const Point &v) {
return sqrt(dot(u, v));
}
db cross(const Point &u, const Point &v) {
return u.x * v.y - u.y * v.x;
}