计算几何

判断点在线段哪一边

计算叉积,大于0在上面,小于0在下面。

已知$$P_1(x_0, y_0),\space P_2(x_1, y_1), \space P_3(x_3, y_3)$$三个点坐标,求$$P_3$$在线段$$P_1P_2$$的哪一侧。则构造向量$$\vec{P_1P_2}, \space \vec{P_2P_3}$$,算$$\vec{P_1P_2}\times \vec{P_2P_3}$$即可。

$$\vec{(x_1, y_1)} \times \vec{(x_2, y_2)} = x_1y_2 - x_2y_1$$

struct Vector {
    double x, y;

    double cross_prod(Vector &v) const {
        return this->x * v.y - this->y * v.x;
    }
};

坐标系上一点绕原点旋转公式

$$ X_1=\cos(A)\cdot X_0 - \sin(A)\cdot Y_0;

Y_1=\sin(A)\cdot X_0 + \cos(A)\cdot Y_0; $$