• 二角函数的性质与应用


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

    会有不严谨的地方


    (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})提出的建议

  • 相关阅读:
    我业余时间开发的东西文本编辑器 美丽的控件
    讲讲语言转换程序:将一种语言转换为另一种语言的程序
    调整心态,正确应对所学技术的失宠?(至F#,SL的学习者们)
    开贴说说文本编辑器的那些事情捕获输入内容
    开贴说说文本编辑器的那些事情 字符串的宽度
    电话亭。
    【旅行】西湖——初秋。
    偶这个前端设计师有生以来写过的最复杂的程序业务逻辑(菜鸟贴)。
    “页面制作人员”?“页面工程师”?“页面架构师”?滚一边去!
    【旅行】生的活力——西塘正午。
  • 原文地址:https://www.cnblogs.com/daklqw/p/10712938.html
Copyright © 2020-2023  润新知