二角函数的性质与应用

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

会有不严谨的地方


\(\def\bsin{\mathrm{bsin}}\def\bcos{\mathrm{bcos}}\def\btan{\mathrm{btan}}\def\bsec{\mathrm{bsec}}\def\bcsc{\mathrm{bcsc}}\def\bcot{\mathrm{bcot}}\def\barcsin{\mathrm{barcsin}}\def\barccos{\mathrm{barccos}}\def\barctan{\mathrm{barctan}}\def\dbsin{\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 \binom{x}{i} g(i) \]

\[g(x) = \sum_{i=0}^n \binom{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 \binom{x}{i} g(i) \]

因此轻易地得到了式子

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

于是就轻易地解决了

代码略

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


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

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

posted @ 2019-04-15 20:39  daklqw  阅读(1122)  评论(1编辑  收藏  举报