Mathematica操作
首先,優先使用系統內置函數實現,與此相關的內置函數包括Translate/TranslationTransform、Rotate/RotationTransform這幾個常用的。每個函數在不同的場景下有不同的優勢。
- 實例1:使用系統內置“動詞”函數
(*使用系統內置“動詞”函數*)
cube = Cylinder[{{0, 0, 0}, {0, 0, 0.5}}, 0.2]; (*生成一個圓柱體*)
cube1 = Rotate[Translate[cube, {1, 1, 1}], 45 Degree, {1, 0, 0}];
(*使用系統自帶動作變換函數進行變換,先平移,再旋轉*)
- 實例2:使用系統內置“名詞”函數
(*使用系統內置“名詞”函數*)
cube = Cylinder[{{0, 0, 0}, {0, 0, 0.5}}, 0.2]; (*生成一個圓柱體*)
cube2 = GeometricTransformation[GeometricTransformation[cube, TranslationTransform[{1, 1,1}]],
RotationTransform[60 Degree, {1, 0, 0}]];(*使用系統自帶名詞變換函數進行變換,先平移,再旋轉*)
- 實例3:使用自定義函數
(*使用自定義函數*)
SetDirectory["Z:\Wushuichuan\05-計算仿真\基于Mathematica機器人仿真\Packages"];
<< Screws.m
transform[shape_, g_] := GeometricTransformation[shape, TransformationFunction[g]] (*定義圖形變換函數*)
r = {{1, 0, 0}, {0, Cos[45 Degree], -Sin[45 Degree]}, {0, Sin[45 Degree], Cos[45 Degree]}}; (*定義一個繞X軸旋轉45度對應的矩陣*)
p = {1, 1, 1}; (*生成一個平移向量*)
g = RPToHomogeneous[r, p]; (*生成一個4x4的變換矩陣*)
cube = Cylinder[{{0, 0, 0}, {0, 0, 0.5}}, 0.2]; (*生成一個圓柱體*)
cube3 = transform[cube, g]; (*使用自定義圖形變函數進行變換*)

后記
- 以上每種方法在不同的場景均有不同的優勢,要靈活運用,主要是函數參數的形式不一樣。具體應用可以參考Wolfram參考資料。
- 注意系統內置動詞性函數和名詞性函數的區別,一般情況下,動詞性 函數可單獨使用,名詞性函數要配合其它函數使用,如實例2中要配合GeometricTransformation函數使用。名詞性函數只是產生了一個相應的變換矩陣,且告訴系統這不是一個一般的矩陣,這是一個變換用的矩陣。
- 實例3中的自定義函數和實例2中的名詞性函數有相似之處,這個相似性與TransformationFunction有關,名詞性變換函數產生的是一個變換矩陣,一般的變換矩陣不能直接用于變換,必須要由TransformationFunction函數來告知系統這是一個變換矩陣,經它處理后就可以當作GeometricTransformation的參數作為變換矩陣用于變換了。
浙公網安備 33010602011771號