Skip to content

Instantly share code, notes, and snippets.

@VincentTam
Created February 22, 2025 16:32
Show Gist options
  • Save VincentTam/e230f9f87c7095703099f4900ccc1b22 to your computer and use it in GitHub Desktop.
Save VincentTam/e230f9f87c7095703099f4900ccc1b22 to your computer and use it in GitHub Desktop.
F.2 Trigonometry and log (in simplified Chinese)

从前,有位富翁,他的家产有 $1 (一整份家产) 他的大儿子分走了当中的 1/2 (一半),富翁剩下 $1/2 他的二儿子分走了剩下的 1/2 ,富翁剩下 $1/4 他的三儿子分走了剩下的 1/2 ,富翁剩下 $1/8 他的四儿子分走了剩下的 1/2 ,富翁剩下 $1/16

如此类推

half quarter 1/8 1/16

\begin{tikzpicture}[scale=6]
\begin{CJK}{UTF8}{gkai}
\draw[dashed] (0,0) rectangle (1,1);
\draw[dashed] (0.5,0) -- ++(0,1);
\draw[dashed] (0,0.5) -- ++(0.5,0);
\draw[dashed] (0.25,0) -- ++(0,0.5);
\draw[dashed] (0,0.25) -- ++(0.25,0);
\fill (0,0) rectangle (0.25,0.25);
\node[above] at (current bounding box.north) {四儿子来了分身家后};
\node[below] at (current bounding box.south) {富翁只剩 $\$1/16$};
\end{CJK}
\end{tikzpicture}

观察规律:当 n 儿子来了分身家后,富翁只剩下 $1/2

角色扮演:找出 "儿子" 和 "富翁剩余家产" 的关系

  1. 假设你是一名儿子 ,想知道自己可以得到多少家产:

      分得家产价值
n 儿子 ├──────────────────→ (富翁剩下)$ 1/2

  1. 假设你是富翁 ,想知道谁最后来过分身家:

n 儿子 ←──────────────────┤ (富翁剩下)$ 1/2
      最后来过的儿子

例子

  1. 分得家产价值(五儿子)= $ 1/2⁵ = $ 1/32,所以五儿子分得家产 $ 1/32。
    反过来说,如果我们得知富翁剩下 $ 1/32,那么从
    最后来过的儿子($ 1/32)= 最后来过的儿子($ 1/2)= 儿子
    可知五儿子最后来过。
  2. 如果我们得知富翁剩下 $ 1/65536,想找出最后谁来过,那么便要找出

  的什么次方
1/2       = 1/65536

            的次方
当然,我们可以逐个计算 2

2¹ = 2
2² = 4
2³ = 8
2⁴ = 16

一直到 2¹⁶ = 65536

question

\begin{tikzpicture}[scale=6]
\pgfmathsetmacro\myHalfN{6} % input value of N/2 here
\begin{CJK}{UTF8}{gkai}
\draw[dashed] (0,0) rectangle (1,1);
\foreach \x [evaluate=\x as \xeval using \lastx/2, remember=\xeval as \lastx (initially 0.5)] in {1,...,\myHalfN} {
  \draw[dashed] (\lastx,0) -- ++(0,2*\lastx);
  \draw[dashed] (0,\lastx) -- ++(\lastx,0);
}
\fill (0,0) rectangle ({pow(0.5,\myHalfN)}, {pow(0.5,\myHalfN)});
\node[above] at (current bounding box.north) {谁来了分身家后,};
\node[below] at (current bounding box.south) {让富翁最后只剩 $\$1/4096$?};
\end{CJK}
\end{tikzpicture}

使用 "$ 1/65536" 标记金额,比较 "$ 1/2¹⁶ " 的写法:

  • 👍 容易看出数值,较贴近日常生活
    (比较 "我 16 小时沒睡" 和 "我 2⁴ 小时沒睡",前者才是 "人话")
  • 👎 容易抄错数字
    (更夸张的例子:2²⁰ = 1 048 576,抄下 "2²⁰" 明显比 "一百零四万 八千五百七十六" 要快)

所以我们从下面等式

 ???
2    = 一个很大的数字

中找出 "???" 的数值,方便记下数字,取代 這个很大的数字

留意其实把上面

n 儿子来了之后,富翁剩下家产 $ 1/2 中的 "$ 1/2" 改成 "$ 1/3",或 "$ 1/5",也有类似的计算

遇上一道题,便重新将整个 "富翁分家产" 的故事搬出来,太费时。所以把以上的內容抽象化。先固定一個 底数(这里仍然选 "2")。

12¹ = 2
22² = 4
32³ = 8
42 = 16

n2 = 一个很大的数字

留意从 左边的数字(运用 "对应法则 ⟼")找出 右边的数字 的过程是可逆的,也就是说,可以反过来,从 右边的数字 找回 左边的数字

嘗试记下反向查找 左边的数字 过程:
log 右边的数字 = 左边的数字
当中底数 右边的数字 都是給定的,然后想找出未知的 左边的数字

例如 log 65536 = 16(因为 2¹⁶ = 65536

其实把 底数 換成 3,或者 5,或者 1.5 也能得出一个可逆的 "对应法则 ⟼",以下展示 底数3 的一些情形。

13¹ = 3
23² = 9
33³ = 27
43 = 81

n3 = 一个很大的数字

log 81 = 4(因为 3 = 81

給定一个底数 a,"log" (对数)基本上就是 "⟼" 的相反过程

        的次方
上面 "逐个计算 2    " 解方程 "2 = 65536" 的策略太慢,下面会示范一个更有效率的方法。 这方法背后的理论基础是指数定律。

指数定律 I(实底数,指数为整数)

a, b 为任意实数,m, n 为任意整数。

  1. 指数相加(相同底数)aᵐ = aᵐ aⁿ
  2. 指数相乘: (aᵐ) = aᵐⁿ
  3. 底数分拆/合并(相同指数): (ab) = aⁿ bⁿ
  4. 负指数(底数非零 a ≠ 0)a⁻ⁿ = 1 / aⁿ

指数定律 II(正实底数,指数为实数)

💡 本节和上节分別:

  • 指数変任意实数:指数 mn 分別被 st 取代
  • (于是)底数 ab(一定)変正数(" (-1)¹⸍² " 在实数集 ℝ 上无定义)

a, b 为任意正数,s, t 为任意实数。

  1. 指数相加(相同底数) = aᵗ
  2. 指数相乘: () = aˢᵗ
  3. 底数分拆/合并(相同指数): (ab) = aᵗ bᵗ
  4. 负指数(底数非零 a ≠ 0)a⁻ᵗ = 1 / aᵗ

由指数定律及对数定义可以推导出对数公式

对数运算法则

  • 对数的定义
    a, b, xy 为任意正数,则存在任意实数 s, t,满足:
    • = xs = log(x)
    • bᵗ = yt = log ₗ꜆ (y)
    • 特例:log(a) = 1
  • 常用对数:对于任意正数 a,log(a) = log₁₀(a)
    • 特例:log(10) = log₁₀(10) = 1
  • 换底公式:对于任意正数 ab,log(b) = log(b) / log(a)
    左边等式中的对数底数为 a,右边等式中的对数底数変为 '10'
    || 设 w = log(b), u = log(a), v = log(b),則按对数定义有 a = 10, b = 10 = b。||
    ||将前面两条等式代入最后一条等式:(10)ʷ = 10,运用指数定律得 10ᵘʷ = 10||
    ||指数函数严格递增,所以可逆:10ᵘʷ = 10uw = vw = v / u||
  • 化积为和:对于任意正数 xy,有 log(xy) = log(x) + log(y)
    ||代入 a = b = 10,取 s = log(x) 和 t = log ₗ꜆ (y)||
    ||则 log(xy) = log(10ˢ 10) = log(10ˢ) = s + t = log(x) + log(y)||
    ||中间第二个 '=' 用上指数定律||
  • 化幂为积:对于任意正数 a 和任意实数 s,log() = s log(a)
    ||又设 u = log(a) ⟺ a = 10,那么 = (10)ˢ = 10ᵘˢ(又用了其中一条指数定律)||
    ||最后两边取对数 log() = us = slog(a)||

因为科学计算器能计算常用对数,所以实际使用科学计算器计算对数 log(x) 时,套用换底公式 log(x) = log(x) / log(a) 即可

例子

  1. log₂ 65536 = log(65536) / log(2) = 16
  2. log₃ 2187 = log(2187) / log(3) = 7
  3. log₆ 1296 = log(1296) / log(6) = 4

湾中论三角

正值外国春假,一家人打算到 "半圆港湾" 度假。他们乘船从港湾西端出发。

harbour

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\begin{CJK}{UTF8}{gkai}
\pgfmathsetmacro\t{68} % angle t in DEGREES
\node[fill, circle, minimum size=5pt, inner sep=0pt, label={below left:小船位置}] (P) at (-0.5,0) {};  % "west" ~ oPp. side
\coordinate (H) at (2*\t:0.5); % ~ Hyp.
\coordinate (A) at (0.5, 0); % "east" ~ Adj. side
\fill[blue, opacity=0.5] (P) -- (A) arc (0:2*\t:0.5) -- cycle; % "sea"
\draw[dashed, opacity=0.5, shorten >=-3cm, shorten <=-1cm] (P) -- (H)
  node[pos=2, above=1cm, sloped] {不可见的区域};
\draw (A) arc (0:2*\t:0.5) node[sloped, above, pos=0.5]{可见的半圆港湾部分}; % semicircle arc w/ diam. 1
\draw[dashed] (P) arc (180:2*\t:0.5);
\node[fill, circle, yellow, minimum size=3pt, inner sep=0pt] (O) at (0, 0) {}; % origin
\draw[yellow] (P) -- (A) node [midway, below] {$\text{直径长} = 1$};
\draw[blue!20, thick] (A) -- (H) node [midway, above, sloped] {$\text{正面对着小船乘客的弦}$};
\draw[red!60, dashed, thick] (P) -- (H) node [midway, above=0.5cm, sloped] {$\text{余下的弦}$};
\pic [draw, ->, "$\theta$", angle radius=10pt, angle eccentricity=2] {angle = A--P--H};
\pic [draw, angle radius=10pt] {right angle= P--H--A};

% label node with theta in degrees
\node[draw, above] at (current bounding box.north west) {$\theta = \t\degree$};
\end{CJK}
\end{tikzpicture}

上面蓝色区域代表乘客见到的海。有一条虚(想的)斜线(,代表船上乘客的视野范围),和下面横线形成角 θ,分割出两片区域:

  • 左边的区域 "不可见",以半透明显示
  • 虚斜线右边以及下面横线上面的区域 "可见"

虚斜线和半圆相交于一点,将这点与港湾东端连成一线,形成一条弦线(圆周上两点连成的线段)
这条弦正面对着小船乘客,我们叫它 "正弦"
除此之外,还有一条弦线(以虚线示),和刚刚虚斜线重叠了,我们叫它 "余下的弦",或更简単一点,"余弦"
两条弦形成一直角,和半径形成一个直角三角形

这个直角三角形中:

  • 正弦(与角 θ 相对)边长记作 "sin θ"
  • 余弦(与角 θ 相邻)边长记作 "cos θ"

harbour2

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\begin{CJK}{UTF8}{gkai}
\pgfmathsetmacro\t{68} % angle t in DEGREES
\node[fill, circle, minimum size=5pt, inner sep=0pt, label={below left:小船位置}] (P) at (-0.5,0) {};  % "west" ~ oPp. side
\coordinate (H) at (2*\t:0.5); % ~ Hyp.
\coordinate (A) at (0.5, 0); % "east" ~ Adj. side
\fill[blue, opacity=0.5] (P) -- (A) arc (0:2*\t:0.5) -- cycle; % "sea"
\draw[dashed, opacity=0.5, shorten >=-3cm, shorten <=-1cm] (P) -- (H)
  node[pos=2, above=1cm, sloped] {不可见的区域};
\draw (A) arc (0:2*\t:0.5) node[sloped, above, pos=0.5]{可见的半圆港湾部分}; % semicircle arc w/ diam. 1
\draw[dashed] (P) arc (180:2*\t:0.5);
\node[fill, circle, yellow, minimum size=3pt, inner sep=0pt] (O) at (0, 0) {}; % origin
\draw[yellow] (P) -- (A) node [midway, below] {$\text{直径长} = 1$};
\draw[blue!20, thick] (A) -- (H) node [midway, above, sloped] {$\sin \theta$};
\draw[red!60, dashed, thick] (P) -- (H) node [midway, above=0.5cm, sloped] {$\cos \theta$};
\pic [draw, ->, "$\theta$", angle radius=10pt, angle eccentricity=2] {angle = A--P--H};
\pic [draw, angle radius=10pt] {right angle= P--H--A};

% label node with theta in degrees
\node[draw, above] at (current bounding box.north west) {$\theta = \t\degree$};
\end{CJK}
\end{tikzpicture}

ℹ️ "sin" 源自拉丁语 "sinus"。該拉丁詞的意思是 "港湾"。
🤔 这样理解 "sinus",便会受限于图中 "港湾" 的大小,θ 只能是锐角。

作结束本节前,我给出一种(在 "港湾" 內)对 "正切" 的解读
"切" 指的是 "切线"。想像将一个球体放在平的桌面上,正面看来像

sphere and long

\begin{tikzpicture}
\draw (0,0) circle (1);
\draw (-1,-1) -- (1,-1);
\end{tikzpicture}

下面的横线和圆形只相交于一点,这样的的线,我们称为 "圆形的切线"

"直线" (在欧几里得《几何原本》中)的定义沒有 "起点" 和 "终点",可以 "无限" 延伸
但船上乘客 "可见" 的 "切线" 部分,只限於下图中虚斜线右边和底下橫线以上的一段

tangent68 tangent40

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\begin{CJK}{UTF8}{gkai}
\pgfmathsetmacro\t{68} % angle t in DEGREES
\node[fill, circle, minimum size=5pt, inner sep=0pt, label={below left:小船位置}] (P) at (-0.5,0) {};  % "west" ~ oPp. side
\coordinate (H) at (2*\t:0.5); % ~ Hyp.
\coordinate (A) at (0.5, 0); % "east" ~ Adj. side
\coordinate (T) at (0.5, {tan(\t)}); % "Tangent" end pt
\fill[blue, opacity=0.5] (P) -- (A) arc (0:2*\t:0.5) -- cycle; % "sea"
\draw[dashed, opacity=0.5, shorten >=-3cm] (P) -- (T)
  node[pos=0.5, above=1cm, sloped] {不可见的区域};
\draw (A) arc (0:2*\t:0.5) node[sloped, above, pos=0.5]{可见的半圆港湾部分}; % semicircle arc w/ diam. 1
\draw[dashed] (P) arc (180:2*\t:0.5);
\node[fill, circle, yellow, minimum size=3pt, inner sep=0pt] (O) at (0, 0) {}; % origin
\draw[yellow] (P) -- (A) node [midway, below] {$\text{直径长} = 1$};

\draw[blue!20, thick] (A) -- (H) node [midway, above, sloped] {$\sin \theta$};
\draw[red!60, dashed, thick] (P) -- (H) node [midway, above=0.5cm, sloped] {$\cos \theta$};
\pic [draw, ->, "$\theta$", angle radius=10pt, angle eccentricity=2] {angle = A--P--H};
\pic [draw, angle radius=10pt] {right angle= P--H--A};

\draw[yellow, thick] (A) -- (T)
  node [midway, below, sloped] {$\text{``切线'' 长度} = \tan \theta$}; % "Tangent"
\pic [draw, yellow, angle radius=10pt] {right angle= T--A--P};

% label node with theta in degrees
\node[draw, above] at (current bounding box.north west) {$\theta = \t\degree$};
\end{CJK}
\end{tikzpicture}

"正切" 可以暫时看成 "正面对着船上乘客的切线",它的边长以 "tan θ" 表示
⚠️ 以上名称並非正式定义,只是个引子,方便记忆

冲出港湾

想像上图是被印在一透明胶片上,翻转胶片並旋转,使得原来的虚线橫着。

harbour 40 flipped

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
% rotated and flipped
\begin{CJK}{UTF8}{gkai}
\pgfmathsetmacro\t{40} % angle t in DEGREES
\node[fill, circle, minimum size=5pt, inner sep=0pt, label={below left:小船位置}] (P) at (0,0) {};  % "west" ~ oPp. side
\coordinate (A) at (\t:1); % "east" ~ Adj. side
\coordinate (H) at (P-|A); % ~ Hyp.
\coordinate (T) at ({sec(\t)}, 0); % "Tangent" end pt
\fill[blue, opacity=0.5] (P) -- (A) arc (\t:-\t:0.5) -- cycle; % "sea"
\draw[dashed, opacity=0.5, shorten >=-3cm] (P) -- (T)
  node[pos=0.5, below=0.5cm, sloped] {不可见的区域};
%\draw (A) arc (\t:-\t:0.5) node[sloped, above, pos=0.5]{可见的半圆港湾部分}; % semicircle arc w/ diam. 1
\draw[dashed] (P) arc (\t-180:-\t:0.5);
\node[fill, circle, yellow, minimum size=3pt, inner sep=0pt] (O) at (\t:0.5) {}; % origin
\draw[yellow] (P) -- (A) node [midway, above, sloped] {$\text{直径长} = 1$};

\draw[blue!20, thick] (A) -- (H) node [midway, below, sloped] {$\sin \theta$};
\draw[red!60, dashed, thick] (P) -- (H) node [midway, below=0.2cm] {$\cos \theta$};
\pic [draw, ->, "$\theta$", angle radius=10pt, angle eccentricity=2] {angle = H--P--A};
\pic [draw, angle radius=10pt] {right angle= P--H--A};

\draw[yellow, thick] (A) -- (T)
  node [midway, above, sloped] {$\text{``切线'' 长度} = \tan \theta$}; % "Tangent"
\pic [draw, yellow, angle radius=10pt] {right angle= T--A--P};

% label node with theta in degrees
\node[draw, above] at (current bounding box.north west) {$\theta = \t\degree$};
\end{CJK}
\end{tikzpicture}

改変角度並观察:和「小船」位置连着的黃色边的长度永远为 1

固定「小船」位置(上图中的白圆点 ' • '),则「港口東端」(两条黃色线段的交叉点)为単位圆(以白圆点 ' • ' 为圆心,半径为 1 的圆)上的点

tangent 68 flip

unit circle 68

以単位圆上的点 Ax-坐标和 y-坐标分別作为 cos θ 和 sin θ 的定义。
上图中的 θ 为从正 x-轴逆时针旋转到 OA 的角度,θ 可以是任何实数

unit circle 150

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\pgfmathsetmacro\t{150} % angle t in DEGREES
\coordinate[label=below left:$O$] (O) at (0, 0);
\coordinate[label=below:$H$] (H) at ({cos(\t)}, 0);
\coordinate[label=above:$A$] (A) at ({cos(\t)}, {sin(\t)});
\coordinate[label=below right:$E$] (E) at (1, 0);
\coordinate[label=above right:$T$] (T) at (1, {tan(\t)});
\draw (O) circle (1);
% axes
\draw[->] (-1.3, 0) -- (1.3, 0) node [right]{$x$};
\draw[->] (0, -1.3) -- (0, 1.3) node [above]{$y$};
\begin{scope}[thick]
% colored sides
\draw[blue!40] (O) -- (H) node [below, midway, seglen] {$\cos \theta$};
\draw[red!40] (H) -- (A) node [below, midway, sloped, seglen] {$\sin \theta$};
\draw[green] (E) -- (T) node [below, midway, sloped, seglen] {$\tan \theta$};
% angle decorations
\draw pic[seglen, draw, ->, "$\theta$", angle radius=0.3cm, angle eccentricity=1.8] {angle=E--O--A};
\draw (H) rectangle ++(-0.05, 0.05);
\draw (E) rectangle ++(-0.05, 0.05);
\end{scope}
% hypotenuse
\draw (O) -- (A) node [above left, midway] {$1$}
  -- (T);
% node with theta in degrees
\node[draw, anchor=north west] at (current bounding box.north west) {$\theta = \t\degree$};
\end{tikzpicture}

unit circle 220

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\pgfmathsetmacro\t{220} % angle t in DEGREES
\coordinate[label=below left:$O$] (O) at (0, 0);
\coordinate[label=below:$H$] (H) at ({cos(\t)}, 0);
\coordinate[label=above:$A$] (A) at ({cos(\t)}, {sin(\t)});
\coordinate[label=below right:$E$] (E) at (1, 0);
\coordinate[label=above right:$T$] (T) at (1, {tan(\t)});
\draw (O) circle (1);
% axes
\draw[->] (-1.3, 0) -- (1.3, 0) node [right]{$x$};
\draw[->] (0, -1.3) -- (0, 1.3) node [above]{$y$};
\begin{scope}[thick]
% colored sides
\draw[blue!40] (O) -- (H) node [below, midway, seglen] {$\cos \theta$};
\draw[red!40] (H) -- (A) node [below, midway, sloped, seglen] {$\sin \theta$};
\draw[green] (E) -- (T) node [below, midway, sloped, seglen] {$\tan \theta$};
% angle decorations
\draw pic[seglen, draw, ->, "$\theta$", angle radius=0.3cm, angle eccentricity=1.8] {angle=E--O--A};
\draw (H) rectangle ++(-0.05, 0.05);
\draw (E) rectangle ++(-0.05, 0.05);
\end{scope}
% hypotenuse
\draw (O) -- (A) node [above left, midway] {$1$}
  -- (T);
% node with theta in degrees
\node[draw, anchor=north west] at (current bounding box.north west) {$\theta = \t\degree$};
\end{tikzpicture}

θ < 0,则旋转方向从「逆时针」改为「顺时针」

unit circle -57

\begin{tikzpicture}[scale=6, seglen/.style={font=\small}]
\pgfmathsetmacro\t{-57} % angle t in DEGREES
\coordinate[label=below left:$O$] (O) at (0, 0);
\coordinate[label=below:$H$] (H) at ({cos(\t)}, 0);
\coordinate[label=above:$A$] (A) at ({cos(\t)}, {sin(\t)});
\coordinate[label=below right:$E$] (E) at (1, 0);
\coordinate[label=above right:$T$] (T) at (1, {tan(\t)});
\draw (O) circle (1);
% axes
\draw[->] (-1.3, 0) -- (1.3, 0) node [right]{$x$};
\draw[->] (0, -1.3) -- (0, 1.3) node [above]{$y$};
\begin{scope}[thick]
% colored sides
\draw[blue!40] (O) -- (H) node [above, midway, seglen] {$\cos \theta$};
\draw[red!40] (H) -- (A) node [below, midway, sloped, seglen] {$\sin \theta$};
\draw[green] (E) -- (T) node [below, midway, sloped, seglen] {$\tan \theta$};
% angle decorations
\draw pic[seglen, draw, <-, "$\theta$", angle radius=0.3cm, angle eccentricity=1.8] {angle=A--O--E};
\draw (H) rectangle ++(-0.05, 0.05);
\draw (E) rectangle ++(-0.05, 0.05);
\end{scope}
% hypotenuse
\draw (O) -- (A) node [above left, midway] {$1$}
  -- (T);
% node with theta in degrees
\node[draw, anchor=north west] at (current bounding box.north west) {$\theta = \t\degree$};
\end{tikzpicture}

HKDSE CAST 图表

由以上几张图像,可以观察出一些三角函数的基础性质:

  • 三角函数是周期函数
    • 正弦(sin)和余弦(cos)函数的周期是 360°
    • 正切(tan)函数的周期是 180°
  • 商数关系:tan θ = sin θ / cos θ(當分母不为零时)
  • 从毕氏公式看出平方关系:sin² θ + cos² θ = 1
  • 余角关系:
    • sin(90° − θ) = cos θ
    • cos(90° − θ) = sin θ
    • tan(90° − θ) = 1 / tan θ
  • 补角关系:
    • sin(180° − θ) = sin θ
    • cos(180° − θ) = −cos θ
    • tan(180° − θ) = −tan θ

💡 可以使用经典 "CAST" 图表,透过思考三角函数值何时为正数,辅助记忆三角函数公式

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment