关于Mathematica中RotationTransform函数的问题

时间:2011-07-23 18:36:43

标签: wolfram-mathematica

背景:

  a = 0; b = 0; c = 0;
  Manipulate[Graphics3D[
    GeometricTransformation[
     {Cuboid[{0, 0, 0}, {1, 1, 1}]},
     {RotationTransform[x, {1, 1, 0}, {a, b, c}]}], 
    ViewPoint -> Left], {x, 0, 2 \[Pi]}]

我的问题涉及具有以下签名的RotationTransform:

  RotationTransform[x, {1, 1, 0}, {a, b, c}]

文档说:“围绕轴固定在点p处进行3D旋转”,在上面的示例中,w = {1,1,0}并且p = {a,b,c}。

令我惊讶的是,无论我指定给(a,b,c)的值是什么,旋转都是相同的。我假设我不理解文档,在某处犯了错误。我原本期望a,b,c的不同值至少有不同的旋转。更改向量w的行为与预期一致。

请解释p。

的目的

2 个答案:

答案 0 :(得分:6)

从帮助中考虑以下示例:

gr={Cuboid[],AbsolutePointSize[10],Opacity[1],{Magenta,Point[{0,0,0}]},   
   {Green,Point[{1,1,1}]}};

p = {1,1,1};
Graphics3D[{{Opacity[.35], Blue, gr}, 
  GeometricTransformation[{Opacity[.85], Red, gr}, 
   RotationTransform[Pi/6, {0, 0, 1}, p]]}, Boxed -> False]

enter image description here

现在用:

p={1,0,0};

enter image description here

答案 1 :(得分:4)

可能会明确这一点。它确实有效果。我显示了锚点和轴。

Manipulate[
  Module[{w={1,0,0},p={-2,2}},
    Graphics3D[
    {
       {Opacity->.4,GeometricTransformation[
         {Cuboid[{0,0,0}]},RotationTransform[angle,w,{a,b,c}]]
        },

       {Blue,PointSize[0.05],Point[{a,b,c}]},
       {Red,Thick,Line[{{a,b,c},{a,b,c}+w}]}
    },

    ImageSize->300,
    ImagePadding->2,AxesOrigin->{0,0,0},
    ImageMargins->2,ViewAngle->All,
    Axes->True,
    Ticks->None,
    PlotRange->{p,p,p}
    ]
  ],

  {angle,0,2 \[Pi],ImageSize->Tiny},
  {{a,0,"a"},0,1,.1,Appearance->"Labeled",ImageSize->Tiny},
  {{b,0,"b"},0,1,.1,Appearance->"Labeled",ImageSize->Tiny},
  {{c,0,"c"},0,1,.1,Appearance->"Labeled",ImageSize->Tiny},

   ControlPlacement->Left
]

enter image description here