iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
佛心分享-SideProject30

用 GenAI 創造虛擬 Tutting 舞者的 30 天冒險系列 第 9

Day 9 | Tutting 舞蹈與正向運動學(FK)的關係

  • 分享至 

  • xImage
  •  

本日作品欣賞!

" Movements " | Tutting in 4k | Strobe


在 Day 8 探討 Tutting 動作的數位化可以透過 FK(正向運動學)與 IK(逆向運動學)兩種方式表達。

今天我們要深入探討 FK(正向運動學) —— 在 Tutting 舞蹈中,這是最基礎、也最常見的運動邏輯,舞者透過決定每個關節的角度,逐層推算出末端關節的位置並完成Tutting的造型。

什麼是正向運動學(FK)

定義

正向運動學(Forward Kinematics, FK)是指:

在已知每個關節的角度(或長度變化)的情況下,依序計算末端位置與姿態的過程。

運算方式

  • 由根節點開始
  • 依序套用旋轉角度與骨架長度,計算下一節的座標
  • 重複直到到達末端(例如:肩 → 肘 → 手腕 → 指尖)

計算公式示例:

x_n = x_(n-1) + L_n * cos(θ_1 + θ_2 + ... + θ_n)
y_n = y_(n-1) + L_n * sin(θ_1 + θ_2 + ... + θ_n)

#L_n = 第 n 段骨架長度
#θ_n = 第 n 個關節的旋轉角度

Tutting 舞蹈與正向運動學(FK) 對應

使用正向運動學(FK)較貼近舞者的思維方式——舞者本來就是先想每個關節的角度,再觀察造型結果。
本節將探討:從現實舞者跳 Tutting → 數位化 FK 模型的轉換過程。

現實舞者的動作順序

1.確認起始活動的關,例如:肩膀開始轉動,作為動作的基準點。
2.由內向外的控制順序,關節影響順序:肩 → 肘 → 手腕 → 指尖。
3.完成造型,當每個關節角度確定後,末端自然形成預期的線條或幾何圖案。

對應到數位化 FK 運動學的方式

將這個舞蹈運動邏輯轉換為數位化 FK 運動學的方式:

舞者的實際行為 FK 運動學對應 數位化參數
固定或微調肩膀位置 設定根節點 座標 (x0, y0) 起點座標
旋轉肩膀 第一段骨架旋轉角 θ1 角度(°或 rad)
彎曲手肘 第二段骨架旋轉角 θ2 角度
翻轉手腕 第三段骨架旋轉角 θ3 角度
調整手臂比例 設定骨架長度 L1, L2, L3 單位長度
確定手尖位置 依序套用 FK 運算公式 即時計算結果 (xn, yn)
//範例:
function updateArmPosition(joints, j1, j2, j3, j4, l1, l2, l3){

    let Rad1 = angles["Angle1"];
    joints[j2].x = joints[j1].x + l1 * Math.cos(Rad1);
    joints[j2].y = joints[j1].y + l1 * Math.sin(Rad1);
   
    let Rad2 = angles["Angle1"] + angles["Angle2"];
    joints[j3].x  = joints[j2].x + l2 * Math.cos(Rad2);
    joints[j3].y  = joints[j2].y + l2 * Math.sin(Rad2);

    let Rad3 = angles["Angle1"] + angles["Angle2"] + angles["Angle3"];
    joints[j4].x = joints[j3].x + l3 * Math.cos(Rad3);
    joints[j4].y = joints[j3].y + l3 * Math.sin(Rad3);
}

結論

正向運動學(FK)就像是舞者腦中的尺規——只要決定每個關節的角度,就能自然形成想要的造型。
在 Tutting 舞蹈的數位化過程中,FK 提供了簡單、精準且高效的方式去還原與生成姿態,是模擬器的核心基礎之一。
下一篇(Day 10)我們將探討Tutting模擬器第二個核心: 逆向運動學(IK),看看如何從末端位置反推整個骨架的姿態。


上一篇
Day 8 | TUTTING 運動探討概論
下一篇
Day 10 | Tutting 舞蹈與逆向運動學(IK)的關係
系列文
用 GenAI 創造虛擬 Tutting 舞者的 30 天冒險29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言