昨天的手寫字把飛白改回「供給與覆蓋率」之後,墨膜與毛細數這條線先停,今天換一個題目:手在寫字時,速度為什麼跟著筆畫的彎度走。1983 年 Lacquaniti、Terzuolo 與 Viviani 在《Acta Psychologica》第 54 卷 115–130 頁發表〈The law relating the kinematic and figural aspects of drawing movements〉,報告徒手繪圖與書寫時,角速度與曲率之間呈冪次關係,後來稱為 2/3 冪次律(等價寫法是速度正比於曲率的 −1/3 次方)。我今天讀到全文的是 2025 年的方法學綜述(Fraser、Di Luca 與 Cook,《Experimental Brain Research》),原始 1983 年論文只查到書目,沒讀到內文。更重要的是,我自己用 Python 把「怎麼量」做了一遍模擬,得到的結果會直接用在實踐段。昨天待辦(一)的墨膜實驗還沒回填,留著;待辦(二)的 Raphaël & de Gennes 原文今天沒碰,仍在清單上。

📖 學

一、定律本身:兩種寫法,同一件事

設筆尖軌跡在紙面上的切向速度為 v,路徑曲率為 κ(曲率半徑 r = 1/κ)。綜述給的兩種形式:

形式公式指數意思
切向速度式v = VGF · κ^(−β)β ≈ 1/3轉彎處(κ 大)慢,直線處快
角速度式ω = VGF · κ^(β′),ω = κ·vβ′ ≈ 2/3切線方向轉動的角速度

兩者用 ω = κv 互相換算:若 v = C κ^(−1/3),則 ω = κ · C κ^(−1/3) = C κ^(2/3)。VGF 是「速度增益係數」,綜述指出它不是真正的常數,在自由繪圖中只是分段近似不變,畫的圈越大它越大。這個係數吸收了整體速度快慢,所以同一個人慢畫與快畫,log–log 圖上是兩條平行的斜率 −1/3 直線,高度不同。

二、橢圓為什麼自帶 1/3:一個三行的推導

最簡單的「驗證」是橢圓,而它有一個容易被忽略的事實:x、y 各做同頻、相差 90 度的正弦運動時,定律是數學恆等式。令 x = a cos ωt、y = b sin ωt。速度分量是 vx = −aω sin ωt、vy = bω cos ωt,加速度 ax = −ω²x、ay = −ω²y。曲率的分子 vx·ay − vy·ax = (−aω sin)(−ω² b sin) − (bω cos)(−ω² a cos) = abω³(sin² + cos²) = abω³,所以 κ = abω³ / v³,移項得 v = (abω³)^(1/3) · κ^(−1/3),指數剛好 −1/3,不多不少。

代數字驗算:a = 6 公分(60 毫米)、b = 3 公分(30 毫米)、週期 1 秒(ω = 2π = 6.283 rad/s)。在長軸端點(x = ±a)速度 = bω = 188.5 毫米/秒,曲率 a/b² = 60/900 = 0.0667 每毫米;在短軸端點速度 = aω = 377 毫米/秒,曲率 b/a² = 30/3600 = 0.00833 每毫米。曲率比 8,速度比 2,而 8^(1/3) = 2,吻合。比例常數 C = ω(ab)^(1/3) = 6.283 × 1800^(1/3) = 6.283 × 12.16 = 76.4,代回 v = 76.4 × 0.0667^(−1/3) = 76.4 × 2.466 = 188.5 毫米/秒,同一個數。

這件事的後果是:畫橢圓得到 −1/3,既可能是「神經系統規劃軌跡時遵守這條定律」,也可能只是「手臂與肌肉的彈簧特性把輸出變成近似諧振」。後一種解釋有明確文獻:Gribble 與 Ostry 1996(《Journal of Neurophysiology》76(5):2853–2860)在模擬中,控制訊號裡曲率與速度毫無關係,但肌肉的彈簧性質加上肢體動力學,仍使橢圓與圓的輸出符合冪次律。我只讀到摘要。

三、爭議:定律是真的規律,還是統計假象

這條定律的來源在文獻裡長期有爭論。Zago、Matic、Flash、Gomez-Marin 與 Lacquaniti 2018(《Experimental Brain Research》236(1):69–82)的摘要這樣寫:數種曲線運動近似遵守 2/3 冪次律,成因有爭議,通常認為與生理機制有關;但近期有論文主張它只是統計假象,本文則「反駁這個假說,證明生物運動的速度–曲率冪次律不是平凡的」。我只讀到這段摘要,沒讀到他們用的反例。而那篇「行為錯覺」論文(Springer 上標題為 The power law of movement: an example of a behavioral illusion)我只看到標題與搜尋摘要,沒讀到內容,不評論它的論證。

另一端是 Huh 與 Sejnowski 2015(《PNAS》112(29):E3950–E3958)。摘要的說法:橢圓繪圖時速度正比於曲率的 −1/3 次方,常被認為適用於一般曲線;他們找出一組各有單一特徵角頻率的基底形狀,受試者畫這些形狀時,冪次律的指數落在 0 到 −2/3 之間,更一般的動作是這些冪次律的線性混合,連隨手塗鴉的速度也能由曲率高準確度預測。我只讀到摘要,所以「1/3 是普適常數」這個說法至少要降級:它是橢圓(單一頻率)的特例。

四、量的時候最容易出錯:綜述的四個警告,與我的模擬

Fraser、Di Luca 與 Cook 2025 的重點是,量測流程本身就能製造或抹掉冪次律。我讀到全文的警告有:

  • 用有限差分求速度與曲率(MATLAB 的 diff 一類)會逐階放大雜訊;他們報告把兩個座標各自獨立的高斯白雜訊隨機漫步丟進傳統流程,也呈現符合冪次律;對合成橢圓加標準差 2 毫米的白雜訊,會產生約 1/3 的假冪次。
  • 把 β = 0(完全不符合定律)的橢圓軌跡通過 4 階低通 Butterworth 濾波,會長出假的 1/3 指數。
  • 先取 log 再做線性迴歸會系統性地把斜率拉向 1/3,且迴歸假設自變數(曲率)沒有誤差,這不合實情;他們建議改用 Savitzky–Golay 微分濾波,並在未取對數的資料上做非線性最小平方。
  • 平板的觸控取樣率可能只有 60 Hz 甚至更低,且間隔不穩,需先重取樣;實驗室設備多為 100 到 200 Hz。另外在某些橢圓幾何下,1/3 冪次律的 r² 要節奏高於約 1 Hz 才達 0.75 以上。

我拿 Python(numpy)自己跑了一遍,用同一個 60 毫米 × 30 毫米的橢圓,兩種軌跡各 5 秒、週期 1 秒:「諧振橢圓」真值斜率 −1/3,「等速橢圓」(沿弧長等速,真值 0),各加不同大小的座標雜訊,每格重複 20 次取平均。有限差分與 Savitzky–Golay(視窗 0.25 秒,三次多項式)的對照如下,斜率是 log v 對 log κ 的線性迴歸:

取樣率軌跡(真值)雜訊 SD有限差分斜率SG 斜率
100 Hz諧振(−0.333)0−0.335−0.350
100 Hz諧振(−0.333)0.5 毫米−0.102−0.349
100 Hz諧振(−0.333)2 毫米−0.239−0.333
100 Hz等速(0)0−0.002−0.048
100 Hz等速(0)0.5 毫米−0.023−0.048
100 Hz等速(0)2 毫米−0.213−0.053
60 Hz諧振(−0.333)0.5 毫米−0.133−0.350
60 Hz等速(0)2 毫米−0.113−0.057

兩個讀法。第一,有限差分在雜訊 0.5 毫米時,把真值 −0.333 的諧振橢圓量成 −0.10,把真值 0 的等速橢圓在 2 毫米時量成 −0.21;斜率對雜訊的反應不單調,所以有限差分的結果無法反推真值。第二,SG 濾波下兩類軌跡穩穩分開,−0.35 與 −0.05,相差約 0.3,而且不隨雜訊大小改變,這是本文後面採用它的理由。但要註明:我的模擬沒有重現綜述中 2 毫米雜訊給出約 1/3 的數字(我得到 0.21 到 0.24),可能是橢圓大小、取樣率或迴歸細節不同,我沒有他們的設定,不下結論;我也沒模擬 Butterworth。SG 在等速情形有 −0.05 的小偏差,是平滑造成,視窗越寬越大。

五、和墨的帳怎麼接:轉折處的墨量是可證偽的預測

定律說彎度大的地方慢,而 09-29 以來的墨模型對「慢」有兩個相反的預測。取一處曲率半徑 2 毫米的小轉折與一處 20 毫米的緩彎,曲率比 10,依 1/3 冪次,轉折處速度是緩彎的 10^(−1/3) = 0.464,即慢 2.15 倍。若沉積量每公尺 δ 依 09-06 的 Landau–Levich 膜(δ ∝ V^(2/3)),轉折處是緩彎的 2.15^(−2/3) = 0.60 倍,轉折處墨較淡;若依 09-29 起的供給限制(δ ∝ V^(−1)),是 2.15 倍,轉折處墨較濃。兩者方向相反,不需要秤,拍照比深淺就能判。這是我推的:假設筆壓、筆寬不變,而毛筆轉折時通常同時有提按與換鋒,兩者都會干擾,所以這只能當粗篩,不是定論。

🧠 記

**一、速度–曲率冪次律有兩種等價寫法:v ∝ κ^(−1/3),或角速度 ω ∝ κ^(2/3)。**兩者由 ω = κv 互換,別把 1/3 與 2/3 當成兩條定律。比例常數(VGF)隨整體速度與圖形大小改變,所以斜率才是比較的量。

**二、同頻、正交的諧振橢圓精確滿足 −1/3,這是恆等式。**a = 6 公分、b = 3 公分、1 秒一圈時,兩端速度比 2、曲率比 8,8^(1/3) = 2。所以橢圓得到 −1/3,不能單獨證明神經規劃,Gribble & Ostry 1996 的模擬是反例的提示。

**三、量測流程能製造或抹掉結果。**我的模擬:SG 濾波下諧振 −0.35、等速 −0.05,穩定分開;有限差分在雜訊下會量到 −0.10 到 −0.24,真假無法區分。

**邊界:**1983 年原文我沒讀到,2018 年 Zago 等人與 Huh & Sejnowski 2015 都只讀到摘要,「行為錯覺」那篇只看到標題。綜述的數字(2 毫米雜訊給約 1/3)我的模擬沒有重現。模擬只是橢圓,沒有真人手寫資料,也沒有漢字或毛筆;毛筆有提按與抬筆,可能不符。第五節的轉折墨量預測依賴「單變量」假設,實務上很難成立。

✍️ 實踐

用 40 分鐘,在手邊的平板、觸控筆電或有觸控筆的手機上,量自己的橢圓與一句手寫字,各算一次斜率。

第一步,存成 trace.html,用瀏覽器開(這段 JavaScript 我沒有在實機執行,只是標準的 Pointer Events,出問題先看 console):

<canvas id="c" width="900" height="500" style="touch-action:none;border:1px solid"></canvas>
<button onclick="dl()">存檔</button>
<script>
const c=document.getElementById('c'), g=c.getContext('2d'); let rows=[], down=false;
c.onpointerdown=()=>{down=true; rows=[];};          // 每次按下重新記錄
c.onpointerup=()=>{down=false;};
c.onpointermove=e=>{ if(!down) return;
  for(const p of (e.getCoalescedEvents?e.getCoalescedEvents():[e])){
    rows.push(p.timeStamp+','+p.clientX+','+p.clientY); g.fillRect(p.clientX-c.offsetLeft,p.clientY-c.offsetTop,2,2);} };
function dl(){const a=document.createElement('a');a.href=URL.createObjectURL(new Blob([rows.join('\n')]));a.download='trace.csv';a.click();}
</script>

第二步,畫三份,每份「一筆不抬」:(A)橢圓,約 12 公分 × 6 公分,連畫 20 圈,節奏用手機節拍器設 60 次每分鐘(一秒一圈);(B)同一橢圓放慢到約 3 秒一圈,連畫 8 圈;(C)連續寫一行草書或行書約 20 個字,不抬筆(抬筆就重開一份檔案)。每份存成不同檔名。

第三步,把下面的腳本存成 trace_fit.py(純 numpy;我用一份有雜訊、不等間隔的合成橢圓驗證,算回 −0.333),對每個 csv 跑 python3 trace_fit.py trace.csv:

import numpy as np, math, sys
def sg(x, w, p, d, dt):                      # Savitzky-Golay 微分,僅 numpy
    h = w // 2
    C = np.linalg.pinv(np.vander(np.arange(-h, h + 1), p + 1, increasing=True))[d]
    C = C * math.factorial(d) / dt**d
    return np.convolve(np.pad(x, h, mode="edge"), C[::-1], mode="valid")
t, x, y = np.loadtxt(sys.argv[1], delimiter=",", unpack=True)
t = (t - t[0]) / 1000.0                      # 毫秒轉秒
f = 100.0; dt = 1 / f                        # 重取樣到均勻 100 Hz
tt = np.arange(t[0], t[-1], dt)
x, y = np.interp(tt, t, x), np.interp(tt, t, y)
w = int(0.25 * f) | 1                        # 視窗 0.25 秒,三次多項式
vx, vy = sg(x, w, 3, 1, dt), sg(y, w, 3, 1, dt)
ax, ay = sg(x, w, 3, 2, dt), sg(y, w, 3, 2, dt)
v = np.hypot(vx, vy); k = np.abs(vx * ay - vy * ax) / v**3
m = slice(int(f), -int(f))                   # 去掉頭尾各 1 秒
ok = (v[m] > 0.05 * v[m].max()) & (k[m] > 0)
s, b = np.polyfit(np.log(k[m][ok]), np.log(v[m][ok]), 1)
r2 = np.corrcoef(np.log(k[m][ok]), np.log(v[m][ok]))[0, 1] ** 2
print(f"slope = {s:.3f}   r2 = {r2:.2f}   n = {ok.sum()}")

斜率與單位無關(座標用像素或毫米,只改變截距),所以不必校準螢幕尺寸。

第四步,判讀。以我的模擬為基準,SG 斜率落在 −0.25 到 −0.40 與諧振橢圓同類,在 0 到 −0.1 與等速同類,中間不下結論;這兩條門檻是我依模擬訂的,不是文獻值。預期:A 組(1 Hz,在綜述說的約 1 Hz 門檻附近)接近 −1/3、r² 高;B 組慢畫,綜述報告低節奏時擬合較差,可能 r² 明顯下降;C 組手寫字依 Huh & Sejnowski 的摘要,指數未必是 −1/3,更像混合。三組只要有一組不照預期,就是有資訊的結果,把三個斜率與 r² 記下來。

第五步(選做,承接昨天的墨實驗):用 A 組同一支筆換成毛筆與水墨(或昨天的甘油水),在宣紙上寫一個含小轉折與緩彎的筆畫,拍照比較轉折處與緩彎處的深淺,對照第五節的方向:較濃偏向供給限制,較淡偏向膜厚律。結果只能算粗篩。

限制:一個人、一種裝置、取樣率不穩(平板常見 60 Hz 以下,腳本已重取樣但不能補回資訊),且橢圓是最容易符合的形狀;用手寫字(C 組)的結論只適用你自己這一次的書寫。

🔗 延伸學習


💬 問 AI

我在做手寫的速度–曲率冪次律(2/3 或 1/3 冪次律)量測與解讀,請逐項回答,並嚴格區分三類:(一)原文明確寫了的、(二)你能查證或憑訓練資料確定的、(三)純屬推論的,每項標明把握程度(高/中/低);查不到或不確定就直說,不要編造文獻、數字或公式。這是學習與實驗設計。
 
【A 組:定律與推導】
1. 我推導:x = a cos ωt、y = b sin ωt 時,κ = abω³/v³,所以 v = (abω³)^(1/3) κ^(−1/3) 是恆等式。請檢查推導,並說明為什麼這使橢圓成為「最容易符合」的形狀。
2. Lacquaniti、Terzuolo & Viviani 1983(Acta Psychologica 54:115–130)實際用的是什麼任務、受試者與指數?他們是否用過漢字或草書?我沒讀到原文。
 
【B 組:爭議】
3. Zago 等人 2018 如何反駁「冪次律只是統計假象」?他們用了哪些反例?Gribble & Ostry 1996 的肌肉彈簧模擬與神經規劃解釋,現在文獻共識偏向哪邊?
4. Huh & Sejnowski 2015 說基底形狀的指數在 0 到 −2/3 之間,這對「手寫字遵守 1/3 律」的說法意味著什麼?
 
【C 組:量測】
5. 我用 Savitzky–Golay(視窗 0.25 秒、三次)與 log–log 線性迴歸,模擬得到諧振橢圓 −0.35、等速橢圓 −0.05。Fraser、Di Luca & Cook 2025 的非線性最小平方與我的做法差在哪?他們說 2 毫米雜訊給約 1/3,我得到 0.21 到 0.24,最可能的設定差異是什麼?
6. 平板觸控筆(60 Hz 以下、間隔不穩)的資料,重取樣到 100 Hz 會引入什麼偏差?我該怎麼檢查?
 
【D 組:毛筆與墨】
7. 我推的預測是:轉折處(曲率比 10 時速度慢 2.15 倍),供給限制模型給 2.15 倍墨量、膜厚模型給 0.60 倍。這個推導成立嗎?毛筆的提按與換鋒會如何干擾?有沒有針對毛筆書寫速度–曲率關係的研究?
 
【E 組】
8. 把所有存疑項目分成三堆:(一)憑訓練資料就能判斷的、(二)必須查一手文獻的(請列出先查哪幾篇)、(三)必須用實際書寫資料才能回答的。