二角函数的性质与应用

前方一本正经的胡说八道警告

会有不严谨的地方


(defsin{mathrm{bsin}}defcos{mathrm{bcos}}deftan{mathrm{btan}}defsec{mathrm{bsec}}defcsc{mathrm{bcsc}}defcot{mathrm{bcot}}defarcsin{mathrm{barcsin}}defarccos{mathrm{barccos}}defarctan{mathrm{barctan}}defdbsin{mathrm{dbsin}})

众所周知,角越少,性质越简单,下面我们开始探讨二角函数(bigonometric function)

由于二维平面上的多边形至少有三个点,所以我们探讨一维数轴上的二边形。

定义二边形 (AB) 为一维数轴上 (AB) 两点构成的封闭图形,易知 (AB) 有两个角 (angle AB)(angle BA),所以二边形也叫二角形(biangle)

因为一维数轴里无法定义直角,但二角函数对任意二边形都适用,所以我们可以直接定义二角函数。

定义二角正弦函数 (bsin(angle AB) = frac{AB}{BA})

因为二角余弦函数的定义和正弦函数相同, (bcos(angle AB) = frac{AB}{BA})

正切函数也一样 (btan(angle AB) = frac{AB}{BA})

所以(bsin(angle AB) = bcos(angle AB) = btan(angle AB))

所以它们共称二角弦函数(bigonometric chord function)

同样,也很好定义(bcsc(x), bsec(x), bcot(x))

它们的反函数同样可以定义(barcsin(x), barccos(x), barctan(x))

可以发现,在几何意义上,对应着三角函数的意义:直角三角形中边的比例,二角函数也有意义:两边之比。

因为一维数轴上无法定义直角,所以二角函数的几何意义对于所有的二角形都成立


此时,如果我们把二边形的边定向,则可以定义有向二角形(directed biangle),同时也可以定义有向二角函数(directed bigonometric function),其记号为二角函数前再加个(d),如(dbsin(x))

对于有向二边形里的有向边,它的长度包含了它的方向信息,其中正的为正方向,负的为负方向,易得(overrightarrow{AB} = -overrightarrow{BA})

可以发现,二角函数及有向二角函数有广泛的应用

1. A + B Problem

为了简化题目,规定 (A)(B) 非负

利用二角函数的性质,我们可以在 (O(min(A, B))) 的时间内求出答案

因为边长为 (0) 的二边形是不存在的,此时二角函数值是没有意义的(计算机中(mathrm{NaN})),所以可以作为边界条件以计算

(C++) 代码如下:

#include <iostream>
#include <cmath>

struct Biangle {
	int x, y; // set x to 0, more convenient
	void construct(int len) {
		x = 0, y = len;
	}
	double getBSin() {
		double ab = abs(x - y), ba = abs(y - x);
		// use bsin(∠AB) = AB / BA
		return ab / ba;
	}
} ;
int main() {
	int A, B;
	std::cin >> A >> B;
	Biangle ba;
	while (true) {
		ba.construct(A);
		if (std::isnan(ba.getBSin())) break; // not exist
		--A, ++B;
	}
	std::cout << B << std::endl;
	return 0;
}

如果使用倍增,可以达到(O(log(min(A, B)))的复杂度,更加优秀。

2. 错位排列

注意到有向二角函数有优美的性质,因此它可以用来做有向二角函数反演(directed bigonometric function inversion)

下面是一个经典的例子

[f(x) = sum_{i=0}^n inom{x}{i} g(i) ]

[g(x) = sum_{i=0}^n inom{x}{i} f(i) dbsin(angle AB)^{x - i} ]

其中(AB)是任意二角形

证明略

对于错位排列,我们可以定义 (f(x))(x) 个人随意排的方案数,(g(x))(x) 个人错位排列方案数,则可以发现

[f(x) = x! ]

通过枚举有几个人站在了自己的位置上,可以发现

[f(x) = sum_{i=0}^n inom{x}{i} g(i) ]

因此轻易地得到了式子

[g(x) = sum_{i=0}^n inom{x}{i} f(i) dbsin(angle AB)^{x - i} = sum_{i=0}^n inom{x}{i} i! dbsin(angle AB)^{x - i} = sum_{i=0}^n x^{underline{i}} dbsin(angle AB)^{x - i} ]

于是就轻易地解决了

代码略

同时,有向二角函数在偏序集上也有它反演的形式,这里不再展开


上面的段落只是对二角函数片面的解释,欢迎提出更深刻的理论

附:感谢( extrm{yhx-12243})( extrm{Weng_Weijie})提出的建议

原文地址:https://www.cnblogs.com/daklqw/p/10712938.html