码迷,mamicode.com
首页 > 其他好文 > 详细

Mathematica图形化三维坐标系的建立

时间:2020-06-30 22:23:59      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:坐标轴   mamicode   灵活   标签   math   箭头   三维   ram   image   

背景

某些情况下(如在三维绘图),需要绘制系统坐标系。
首先来看一下三维迪卡尔坐标系的组成:坐标原点(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]

效果一样,已经通过测试。

Mathematica图形化三维坐标系的建立

标签:坐标轴   mamicode   灵活   标签   math   箭头   三维   ram   image   

原文地址:https://www.cnblogs.com/sachin-woo/p/13216329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!