计算正余弦函数 sin: 当 `|x|` 充分小时, 近似有 `sin x ~~ x`; 否则使用三倍角公式递推. cos: 当 `|x|` 充分小时, 近似有 `cos x ~~ 1-x^2/2`; 否则使用二倍角公式递推.
Cordic 算法 是一种计算 `arctan x` 的查表法.
事先将 `theta_n = arctan 2^-n`, `n = 0, 1, 2, cdots` 存于表中,
然后逐步旋转逼近. 此方法可以逼近任意一个不超过 `sum_(n ge 0) arctan
2^-n ~~ 99.88^@` 的角度.
从平面向量的旋转公式
`bm v_1 = [cos theta, -sin theta; sin theta, cos theta] bm v`
两边同除以 `cos theta` 得到伪旋转公式:
`bm v' = [1, -tan theta; tan theta, 1] bm v`.
取 `bm v_n = (x_n, y_n)`, `tan theta_n = 2^(-n)`. 上式写成
`{ x_(n+1) = x_n - y_n // 2^n;
y_(n+1) = y_n + x_n // 2^n :}`
当 `|y_n|` 足够小时就中止迭代.
结果约为: 63.43494882292201 度
判断多边形方向是否为顺时针 (面积法) [来自 github copilot] 用 Green 公式求边界的曲线积分 `int_(del S) -2y dx = 2 iint_S dx dy`, 若结果为负, 说明曲线为顺时针.
判断点是否在多边形内 (引射线法) [来自 chatgpt] 从待判断的点向右发射一条射线, 若交点数为奇数, 则点在多边形内. 该算法适用于顺时针和逆时针的多边形, 甚至也适用于自相交的多边形 (重叠部分按异或计算). 注意, 按此算法, 边界上的点不算在多边形内.