背景
某些情況下(如在三維繪圖),需要繪制系統(tǒng)坐標系。
首先來看一下三維迪卡爾坐標系的組成:坐標原點(0,0,0),帶箭頭的坐標軸,坐標軸標簽。因此在繪制坐標系時,需要繪制這些元素。
Mathematica實現
coordinateSystem3D = {
{RGBColor[{1, 0, 0}], Arrowheads[0.05], Arrow[Tube[{{0, 0, 0}, {1, 0, 0}}, 0.01]],
Text[Style["X", FontSize -> 16,
FontFamily -> "Arial Baltic"], {1.1, 0, 0}]},
{RGBColor[{0, 1, 0}], Arrowheads[0.05], Arrow[Tube[{{0, 0, 0}, {0, 1, 0}}, 0.01]],
Text[Style["Y", FontSize -> 16,
FontFamily -> "Arial Baltic"], {0, 1.1, 0}]},
{RGBColor[{0, 0, 1}], Arrowheads[0.05], Arrow[Tube[{{0, 0, 0}, {0, 0, 1}}, 0.01]],
Text[Style["Z", FontSize -> 16,
FontFamily -> "Arial Baltic"], {0, 0, 1.1}]}};

如果無需標簽(x、y、z軸的顏色依次是紅、綠、藍),可一行代碼搞定
frame3D = {RGBColor[#], Arrowheads[0.05], Arrow@Tube[{{0, 0, 0}, #}, 0.01]} & /@ IdentityMatrix[3];
Graphics3D[frame3D]
實際上,MMA功能強大,使用靈活,實現同一功能有不同的方法(函數),上述有標簽的坐標系也可以使用MapThread函數實現
(*使用MapThread函數實現*)
f[i_, t_, p_] := {RGBColor[i], Arrowheads[0.05], Arrow@Tube[{{0, 0, 0}, i}, 0.01], Text[Style[t, FontSize -> 16], p]}
frame3D = MapThread[ f, {{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}, {"X", "Y", "Z"}, {{1.1, 0, 0}, {0, 1.1, 0}, {0, 0, 1.1}}}];
Graphics3D[frame3D]
上述無標簽的坐標系也可以使用Table函數實現
(*使用Table函數實現*)
frame3D =
Table[{RGBColor[i], Arrowheads[0.05], Arrow@Tube[{{0, 0, 0}, i}, 0.01]}, {i, {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}}]
Graphics3D[frame3D]
效果一樣,已經通過測試。
浙公網安備 33010602011771號