众所周知,特殊角法是初中几何的降维打击。其在初中的主要体现为 12345 模型。本文对特殊角进一步探究,使之可以适应所有题型。
初步探究
这是本文发布前,笔者关于特殊系的一些探究。
| 角度 |
对边 |
临边 |
斜边 |
| α |
a |
b |
c |
| 2α |
c−b |
c+b |
2c |
| 290°−α |
c−a |
c+a |
2c |
| 2α |
2ab |
2b2−c2 |
c2 |
| 45°−α |
b−a |
b+a |
2c |
由 α 推导出来的其余角度构成一个特殊角系,例如初中常用的 37° 系与 23° 系如下:
| 角度 |
对边 |
邻边 |
斜边 |
| 37° |
3 |
4 |
5 |
| 18.5° |
1 |
3 |
10 |
| 26.5° |
1 |
2 |
5 |
| 74° |
24 |
7 |
25 |
| 8° |
1 |
7 |
52 |
| 角度 |
对边 |
邻边 |
斜边 |
| 23° |
5 |
12 |
13 |
| 11.5° |
1 |
5 |
26 |
| 33.5° |
2 |
3 |
13 |
| 46° |
120 |
119 |
169 |
| 22° |
7 |
17 |
132 |
然而,这种方法有一个致命的缺陷:不同特殊角系不可混用。 在市一模中,笔者班级同学就是将 60°−37° 当作 23° 导致错误。
进阶探究
本文意在解决这个问题。
我们先改掉角度表示法,用角度近似是为了方便,然而在混用特殊角系时会造成歧义。我们用三元组 (a,b,c) 表示三角比为 a:b:c 的角。
则上文可写作
2(3,4,5)=(1,3,10)2(4,3,5)=(1,2,5)2(3,4,5)=(24,7,25)4π−(3,4,5)=(1,7,52)
接下来是重点。我们用这种表示法来实现不同特殊角混用。
(a1,b1,c1)+(a2,b2,c2)=(a1b2+a2b1,b1b2−a1a2,c1c2)(a1,b1,c1)−(a2,b2,c2)=(a1b2−a2b1,b1b2+a1a2,c1c2)
最后附上几个做题常见的东西:
(2020中考)
(4,3,5)−(2,3,13)=(6,17,513)
(2025靶向二)
(24,7,25)−(3,2,13)=(27,86,2513)
其他可能用的:
(3,4,5)−(2,3,13)=(1,18,513)(2,3,13)−(1,3,10)=(3,11,130)(2,3,13)−(1,2,5)=(1,8,65)
代码实现
python 写了一个简单的包,基于 sympy。如果你要探究其他角度,直接跑代码就可以。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| import sympy as sp
class Angle(object): def __init__(self, a, b, c): self.a, self.b, self.c = a, b, c
def __repr__(self): return f'Angle(a={self.a}, b={self.b}, c={self.c})'
def latex(self) -> str: return f'({sp.latex(self.a)}, {sp.latex(self.b)}, {sp.latex(self.c)})'
def coangle(self) -> 'Angle': a, b, c = self.a, self.b, self.c return Angle(b, a, c)
def double(self) -> 'Angle': a, b, c = self.a, self.b, self.c return Angle(2 * a * b, 2 * b * b - c * c, c * c)
def half(self) -> 'Angle': a, b, c = self.a, self.b, self.c return Angle(sp.sqrt(c - b), sp.sqrt(c + b), sp.sqrt(2 * c))
def cohalf(self) -> 'Angle': a, b, c = self.a, self.b, self.c return Angle(sp.sqrt(c - a), sp.sqrt(c + a), sp.sqrt(2 * c))
def __add__(self, beta: 'Angle') -> 'Angle': a1, b1, c1 = self.a, self.b, self.c a2, b2, c2 = beta.a, beta.b, beta.c return Angle(a1 * b2 + a2 * b1, b1 * b2 - a1 * a2, c1 * c2)
def __sub__(self, beta: 'Angle') -> 'Angle': a1, b1, c1 = self.a, self.b, self.c a2, b2, c2 = beta.a, beta.b, beta.c return Angle(a1 * b2 - a2 * b1, b1 * b2 + a1 * a2, c1 * c2)
degree30 = Angle(1, sp.sqrt(3), 2) degree45 = Angle(1, 1, sp.sqrt(2))
|