Re: Rotation of 3D objects
- To: mathgroup at smc.vnet.net
- Subject: [mg86283] Re: Rotation of 3D objects
- From: "David Park" <djmpark at comcast.net>
- Date: Fri, 7 Mar 2008 02:31:28 -0500 (EST)
- References: <fqo8u2$t2s$1@smc.vnet.net>
Here is some code for those who have the Presentations package.
For reflection in a mirror:
Needs["Presentations`Master`"]
Module[
{(* object to reflect *)
gr = ParametricDraw3D[{t, u + t, u t/5}, {t, 0, 2}, {u, -1, 1},
Mesh -> 5,
BoundaryStyle -> Black],
(* Mirror location and normal *)
p = {1, 1, 2},
normal = {0, 0, 1},
vector1, vector2},
{vector1, vector2} = NullSpace[{normal}];
Draw3DItems[
{(* Original object *)
{Opacity[.7, HTML[DarkSeaGreen]], gr},
(* Reflected object *)
{Opacity[.7, HTML[DodgerBlue]], gr} //
ReflectionTransformOp[normal, p],
(* Draw the mirror *)
{Opacity[0.3, HTML[SkyBlue]],
ParametricDraw3D[
p + s vector1 + t vector2, {s, -3, 3}, {t, -3, 3},
Mesh -> None]}},
NeutralLighting[0, 0.6, .1],
NiceRotation,
ViewPoint -> {2, -2.4, .6},
Boxed -> False,
ImageSize -> 300]
]
Multiple copies of rotation about an axis:
Module[
{(* object to reflect *)
gr = ParametricDraw3D[{t, u + t, u t/5}, {t, 0, 2}, {u, -1, 1},
Mesh -> 5,
BoundaryStyle -> Black],
(* axis, location and number of copies *)
axis = {1, 1, 0},
axislocation = {-1.5, -1.5, 2},
ncopies = 4,
rotationangle},
rotationangle = 2 \[Pi]/ncopies;
Draw3DItems[
{(* Rotations *)
{Opacity[.7, HTML[DarkSeaGreen]],
Table[gr //
RotationTransformOp[n rotationangle, axis, axislocation], {n, 0,
ncopies - 1}]},
(* Draw the axis *)
Red, Arrow3D[axislocation, axislocation + 5 axis, {.10}]},
NeutralLighting[0, 0.6, .1],
NiceRotation,
ViewPoint -> {-1, -2.4, .6},
Boxed -> False,
ImageSize -> 300]
]
A Manipulate statement allowing the rotation about an axis by an adjustable
angle theta.
Manipulate[
Module[
{(* object to reflect *)
gr = ParametricDraw3D[{t, u + t, u t/5}, {t, 0, 2}, {u, -1, 1},
Mesh -> 5,
BoundaryStyle -> Black],
(* axis direction and location *)
axis = {1, 1, 0},
axislocation = {-1.5, -1.5, 2}},
Draw3DItems[
{(* Original object *)
{Opacity[.7, HTML[DarkSeaGreen]], gr},
(* Rotated object *)
{Opacity[.7, HTML[DodgerBlue]],
gr // RotationTransformOp[\[Theta], axis, axislocation]},
(* Draw the axis *)
Red, Arrow3D[axislocation, axislocation + 5 axis, {.10}]},
NeutralLighting[0, 0.6, .1],
NiceRotation,
PlotRange -> {{-1, 4}, {-1, 4}, {-1, 5}},
ViewPoint -> {-1, -2.4, .6},
Boxed -> False,
ImageSize -> 300]
],
Style["Rotation about axis by angle \[Theta]", 16],
{\[Theta], 0, 2 \[Pi], Appearance -> "Labeled"}]
--
David Park
djmpark at comcast.net
http://home.comcast.net/~djmpark/
"Narasimham" <mathma18 at hotmail.com> wrote in message
news:fqo8u2$t2s$1 at smc.vnet.net...
> By what command is it possible to create (without writing a code
> separately ):
>
> 1) Reflections of 3D objects about a plane?
>
> 2) Multiple copies equally spaced by rotation around an axis through
> two given points?
>
> E.g.,
> surf = ParametricPlot3D[{ t,u+t, u*t/5}, {t,0,2},{u,-1,1}];
> Rotate[surf,Axis->{ {-1,-1,-1},{1,1,1}} , Copies-> 4 ] ; and,
>
> 3) A single rotation of given object through a given angle on an axis
> through two defined points?
>
> Thanks in advance
>
> Narasimham
>