1. 程式人生 > 其它 >基於.NET的機械運動模擬應用開發

基於.NET的機械運動模擬應用開發

1 簡介

機械運動在物理學中,把一個物體相對於另一個物體位置的變化稱作為機械運動,簡稱運動。機械運動是指一個物體相對於其他物體的位置發生改變,是自然界中最簡單,最基本的運動形態.

自然界中一切物體都在運動。我們利用計算機建立的幾何模型怎麼能靜止不動?

在計算機圖形學中,我們可以使用矩陣變換來描述物體位置的變化(包括位移、旋轉、縮放、鏡面等)。在顯示每一幀的序列中不斷更改物體的位置,就可以實現運動模擬,或者動畫。可以用一個時間函式來描述:

      N = f(t, M)

給定一個初始的矩陣M,隨著時間t的變化,產生新的矩陣N。至於函式f是勻速直線運動還是曲線運動,完全由你掌控。俗話說的好,牛頓三大定律在手,運動模擬不愁~

2 動畫模擬入門

勻速直線運動太簡單了,一般圖形學的課程都會介紹稍微複雜點的例子:月亮、地球、太陽的運動模擬,涉及到星體的公轉和自轉,即相對運動、旋轉。如何使用矩陣來實現,在《圖形學基礎:向量與矩陣》和《矩陣應用之運動軌跡模擬》兩篇文章中有比較詳細的說明。具體的程式碼可以參考AnyCAD Rapid示例:Graphics_Motion[1]

上面的示例比較“原始”,因為直接設定SceneNode的矩陣。直接操作矩陣你可以隨心所欲組合任意的變換,但缺點也很明顯:當動畫多了以後,動畫序列的管理就成問題。比如實現一個六軸機器人關節模擬,程式碼邏輯寫起來就很複雜了。好訊息是,AnyCAD Rapid內建了關節運動模擬,請參考示例Simulation_Robot[2]

和示例Simulation_Skeleton[3]

AnyCAD Rapid SDK目前提供了兩類動畫序列管理的方法:剛體動畫和關節動畫。基於這兩個輔助類可以很容易實現連續動畫,多段動畫前後連著播放。

3 剛體動畫

剛體運動(rigid motion): 對幾何物體只作旋轉, 平移的運動。

RigidAnimation用於管理剛體運動的動畫片段。

RigidAnimationClip是動畫片段的基類,具體的動畫片段有:

•勻速旋轉運動RotateAnimationClip•勻速直線運動MoveAnimationClip•複合運動MatrixAnimationClip

每一段動畫片段定義了起始時間和結束時間,在這段時間內需要完成的勻速運動。這裡的時間都是相對RigidAnimation開始播放的開始的,單位為秒。若在中間有段時間是靜止的,則在兩段序列之間空出一段時間即可。

示例程式碼實現:Simulation_DynamicRay[4]

4 關節動畫

關節動畫主要用於N軸機械臂模擬。RobotArm用於構建機器關節模型,RobotAnimation則用於管理關節運動序列。RobotAnimationClip代表了一段關節運動序列。

RobotAnimationClip控制的是在一段時間內,某個關節的引數的變化區間。如果是轉動關節,則表示的是角度引數的運動區間;如果是位移關節,則表示的是距離引數的區間。

Animation與Clip的關係與剛體動畫的一致。

示例:程式碼實現:Simulation_Robot[5]

5 小結

動畫模擬是個複雜的課題。本文從簡單的勻速運動出發,一覽AnyCAD Rapid SDK的動畫系統的使用。若對形變動畫感興趣,可以參考往期的文章《一種快速鈑金折彎動畫模擬實現方法

若你有複雜的機械運動模擬需求,歡迎與我們聯絡交流。

生命在於運動,機械在於運動!讓我們一起動起來~

References

[1]Graphics_Motion:https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Graphics/Graphics_Motion.cs
[2]Simulation_Robot:https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Robot.cs
[3]Simulation_Skeleton:https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Skeleton.cs
[4]Simulation_DynamicRay:https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_DynamicRay.cs
[5]Simulation_Robot:https://gitee.com/anycad/anycad.rapid.net.sample/blob/master/AnyCAD.WinForms/Simulation/Simulation_Robot.cs